二叉树的后序遍历

134 阅读1分钟

145. 二叉树的后序遍历

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

首先我们要弄清楚后序遍历的规则,是左子树-〉右子数->根节点,当我们在访问左子树或者是右子树的时候,也是相同的规则,这样就自然想到递归的方式 代码如下:

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root, arr = []) {
     if (root) {
        postorderTraversal(root.left, arr)
        postorderTraversal(root.right, arr)
        arr.push(root.val);
    }
    return arr;
};

当然,我们还可以使用循环的方式。利用栈的先进后出。 代码如下:

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
    if (!root) return [];
    let res = [];
    let stack = [root]; // 栈存储跟节点
    while(stack.length) {
        root = stack.pop();
        res.unshift(root.val);
        if (root.left) stack.push(root.left);
        if (root.right) stack.push(root.right);
    }
    return res;
};