-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path199_javascript.js
81 lines (69 loc) · 1.68 KB
/
199_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
76
77
78
79
80
// 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
// 示例:
// 输入: [1,2,3,null,5,null,4]
// 输出: [1, 3, 4]
// 解释:
// 1 <---
// / \
// 2 3 <---
// \ \
// 5 4 <---
// 实例不全 补充示例
//
// 1 <---
// / \
// 2 3 <---
// \ \
// 5 4 <---
// /
// 7 <---
// 输出 [1,3,4,7]
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
// BFS
var rightSideView = function(root) {
if(!root) return [];
let tempArray = [root];
let res = []
while(tempArray.length){
let length = tempArray.length;
while(length --){
let temp = tempArray.shift();
// 当长度为0 时push因为下面是先左再右
if(length == 0) res.push(temp.val);
// 先 push left 再push right
if(temp.left) tempArray.push(temp.left);
if(temp.right) tempArray.push(temp.right);
}
}
return res
};
// DFS
var rightSideView = function(root) {
if(!root) return [];
let res = [];
let dfs = (node , length)=>{
// 当前二叉树深度 和 res数组长度相等 push 因为优先优子树搜索 所有右子树优先 当没有右子树 则push 左子树
if(res.length == length){
res.push(node.val)
}
// 优先右子树搜索
if(node.right) {
dfs(node.right, length +1);
}
if(node.left) {
dfs(node.left, length +1);
}
}
dfs(root, 0)
return res
};