LeetCode刷题,二叉树的后序遍历(145)

276 阅读1分钟

二叉树的后序遍历

给定一个二叉树,返回它的 后序 遍历。递归算法很简单,你可以通过迭代算法完成吗?

解题代码

思路:递归的本质就是使用栈来进行计算,所以我们手动创建一个栈,一直找到最底层的树节点,按照左右根的顺序进行入栈即可。

var postorderTraversal = function(root) {
  if (!root) return [];
  let res = [];
  let stack = [root]; // 放入根节点
  while (stack.length) {
    const root = stack.pop(); // 弹出当前根节点,因为已经操作过了。
    res.unshift(root.val); // 因为是后序遍历,所以当前根节点压入数组首位,如果后面有子树那么子树的根节点就会到栈头部。
    if (root.left) { // 如果有左子树,那么将当前左子树压入栈,继续遍历
      stack.push(root.left)
    }
    if (root.right) { // 如果有右子树,那么将当前右子树压入栈,继续遍历
      stack.push(root.right)
    }
  }
  return res;
};