回忆一下递归实现
*/
var postorderTraversal = function(root) {
var retArr = []
if (!root) return retArr
var helpFunc = (r)=>{
if (!r) return
helpFunc(r.left)
helpFunc(r.right)
retArr.push(r.val)
}
helpFunc(root)
return retArr
}
用模拟栈来实现(方法一) 逆向
var postorderTraversal = function(root) {
if(!root) return []
let cur = root
var stack = []
var retArr = []
while(stack.length !== 0 || cur){
if (cur) {
stack.push(cur)
retArr.push(cur.val)
cur = cur.right
} else {
var tmp = stack.pop()
cur = tmp.left
}
}
return retArr.reverse()
}
用模拟栈来实现(方法二 ) (单栈)
var postorderTraversal = function(root) {
if(!root) return []
let cur = root
var stack = []
var retArr = []
var r = null
while(stack.length !== 0 || cur){
if (cur) {
stack.push(cur)
cur = cur.left
} else {
cur = stack[stack.length - 1]
if (cur.right && cur.right !=r) {
cur = cur.right
} else {
var tm = stack.pop()
retArr.push(tm.val)
r = cur
cur = null
}
}
}
return retArr
}
根左右 【前序】
左根右 【中序】
根右左 【后序–逆向】
右根左 【中序–逆向】