[LeetCode] 145. Binary Tree Postorder Traversal

二叉树的后序遍历。后序遍历我记为左 - 右 - 根

依然用GeeksforGeeks的例子来描述如何做后序遍历吧。

[LeetCode] 145. Binary Tree Postorder Traversal_第1张图片

 

 

 Postorder (Left, Right, Root) : 4 5 2 3 1

依然是迭代和递归两种做法,两种做法的时间空间复杂度也都是O(n)

递归没什么好讲的,直接上代码。

 1 /**
 2  * @param {TreeNode} root
 3  * @return {number[]}
 4  */
 5 var postorderTraversal = function(root) {
 6     let res = [];
 7     if (root === null) return res;
 8     helper(res, root);
 9     return res;
10 };
11 
12 var helper = function(res, root) {
13     if (root === null) return;
14     helper(res, root.left);
15     helper(res, root.right);
16     res.push(root.val);
17 };

 

迭代

需要注意的是当把当前节点cur加入到结果集的时候,要加在结果集的最前面而不是最后。

 1 /**
 2  * @param {TreeNode} root
 3  * @return {number[]}
 4  */
 5 var postorderTraversal = function(root) {
 6     let res = [];
 7     if (root === null) return res;
 8     let stack = [];
 9     stack.push(root);
10     while (stack.length) {
11         let cur = stack.pop();
12         res.unshift(cur.val);
13         if (cur.left) stack.push(cur.left);
14         if (cur.right) stack.push(cur.right);
15     }
16     return res;
17 };

你可能感兴趣的:([LeetCode] 145. Binary Tree Postorder Traversal)