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;
};