JS 二叉树的后序遍历

98 阅读1分钟

正题

给定一个二叉树,返回它的 后序 遍历。

示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [3,2,1]
解析:

首先了解后续遍历的遍历顺序: 自下而上 let -> right -> root

图解二叉树后序遍历:

7.gif

后序遍历遵循原则:

  1. 节点包含左右节点的应先遍历左节点
  2. 节点有且只有右节点时先遍历右节点
  3. 节点不包含任意节点时,输出,并回溯到上一节点

遍历方法:将节点的遍历顺序逆序放入栈中,再通过 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
};

相关文章可参阅之前的文章: 二叉树的前序遍历