二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。递归算法很简单,你可以通过迭代算法完成吗?
解题代码
思路:递归的本质就是使用栈来进行计算,所以我们手动创建一个栈,一直找到最底层的树节点,按照左右根的顺序进行入栈即可。
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;
};