正题
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
解析:
首先了解后续遍历的遍历顺序: 自下而上 let -> right -> root
图解二叉树后序遍历:
后序遍历遵循原则:
- 节点包含左右节点的应先遍历左节点
- 节点有且只有右节点时先遍历右节点
- 节点不包含任意节点时,输出,并回溯到上一节点
遍历方法:将节点的遍历顺序逆序放入栈中,再通过 pop 方法依次遍历,当节点下面还存在左右节点时,采用递归以此类推。
代码实现:
var createStack = function (root, stack) {
if (root === null) {
return
}
stack.push(root)
root.right ? createStack(root.right, stack) : ''
root.left ? createStack(root.left, stack) : ''
}
var postorderTraversal = function(root) {
let stack = []
createStack(root, stack)
let res = []
while(stack.length) {
res.push(stack.pop().val)
}
return res
};
相关文章可参阅之前的文章: 二叉树的前序遍历