-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path145_javascript.js
75 lines (69 loc) · 1.54 KB
/
145_javascript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 给定一个二叉树,返回它的 后序 遍历。
// 示例:
// 输入: [1,null,2,3]
// 1
// \
// 2
// /
// 3
// 输出: [3,2,1]
// 进阶: 递归算法很简单,你可以通过迭代算法完成吗?
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var postorderTraversal = function (root) {
let res = [];
let dfs = (root) => {
if (!root) {
return;
}
dfs(root.left);
dfs(root.right);
res.push(root.val);
};
dfs(root);
return res;
};
// 迭代 使用栈存储过程状态
// 前序
var postorderTraversal = function (root) {
let res = [];
let stack = [root];
while (stack.length) {
let ele = stack.shift();
if (ele.left) {
stack.push(ele.left);
}
if (ele.right) {
stack.push(ele.right);
}
res.push(ele.val);
}
return res;
};
// // 后序
// var postorderTraversal = function (root) {
// let res = [];
// let current = root;
// let stack = [];
// while (stack.length || current) {
// if (current) {
// stack.push(current);
// res.push(current.val);
// current = current.right;
// } else {
// current = stack.shift();
// current = current.left;
// }
// }
// return res;
// };