Skip to content

Commit 2e803a2

Browse files
committed
feat: add solutions to lcof2 problem: No.046
1 parent 6421c40 commit 2e803a2

File tree

4 files changed

+197
-2
lines changed

4 files changed

+197
-2
lines changed

lcof2/剑指 Offer II 046. 二叉树的右侧视图/README.md

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,86 @@
4949

5050
<!-- 这里可写通用的实现逻辑 -->
5151

52+
层序遍历,取每层最后一个元素
53+
5254
<!-- tabs:start -->
5355

5456
### **Python3**
5557

5658
<!-- 这里可写当前语言的特殊实现逻辑 -->
5759

5860
```python
59-
61+
# Definition for a binary tree node.
62+
# class TreeNode:
63+
# def __init__(self, val=0, left=None, right=None):
64+
# self.val = val
65+
# self.left = left
66+
# self.right = right
67+
class Solution:
68+
def rightSideView(self, root: TreeNode) -> List[int]:
69+
ans = []
70+
if not root:
71+
return ans
72+
d = deque([root])
73+
while d:
74+
n = len(d)
75+
for i in range(n):
76+
node = d.popleft()
77+
if i == n - 1:
78+
ans.append(node.val)
79+
if node.left:
80+
d.append(node.left)
81+
if node.right:
82+
d.append(node.right)
83+
return ans
6084
```
6185

6286
### **Java**
6387

6488
<!-- 这里可写当前语言的特殊实现逻辑 -->
6589

6690
```java
67-
91+
/**
92+
* Definition for a binary tree node.
93+
* public class TreeNode {
94+
* int val;
95+
* TreeNode left;
96+
* TreeNode right;
97+
* TreeNode() {}
98+
* TreeNode(int val) { this.val = val; }
99+
* TreeNode(int val, TreeNode left, TreeNode right) {
100+
* this.val = val;
101+
* this.left = left;
102+
* this.right = right;
103+
* }
104+
* }
105+
*/
106+
class Solution {
107+
public List<Integer> rightSideView(TreeNode root) {
108+
List<Integer> ans = new ArrayList<>();
109+
if (root == null) {
110+
return ans;
111+
}
112+
Queue<TreeNode> q = new ArrayDeque<>();
113+
q.offer(root);
114+
while (!q.isEmpty()) {
115+
int n = q.size();
116+
for (int i = 0; i < n; i++) {
117+
TreeNode node = q.poll();
118+
if (i == n - 1) {
119+
ans.add(node.val);
120+
}
121+
if (node.left != null) {
122+
q.offer(node.left);
123+
}
124+
if (node.right != null) {
125+
q.offer(node.right);
126+
}
127+
}
128+
}
129+
return ans;
130+
}
131+
}
68132
```
69133

70134
### **C++**
@@ -116,6 +180,42 @@ public:
116180
};
117181
```
118182

183+
### **Go**
184+
185+
```go
186+
/**
187+
* Definition for a binary tree node.
188+
* type TreeNode struct {
189+
* Val int
190+
* Left *TreeNode
191+
* Right *TreeNode
192+
* }
193+
*/
194+
func rightSideView(root *TreeNode) []int {
195+
var ans []int
196+
if root == nil {
197+
return ans
198+
}
199+
q := []*TreeNode{root}
200+
for n := len(q); n > 0; n = len(q) {
201+
for i := 0; i < n; i++ {
202+
node := q[0]
203+
q = q[1:]
204+
if i == n - 1 {
205+
ans = append(ans, node.Val)
206+
}
207+
if node.Left != nil {
208+
q = append(q, node.Left)
209+
}
210+
if node.Right != nil {
211+
q = append(q, node.Right)
212+
}
213+
}
214+
}
215+
return ans
216+
}
217+
```
218+
119219
### **...**
120220

121221
```
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* type TreeNode struct {
4+
* Val int
5+
* Left *TreeNode
6+
* Right *TreeNode
7+
* }
8+
*/
9+
func rightSideView(root *TreeNode) []int {
10+
var ans []int
11+
if root == nil {
12+
return ans
13+
}
14+
q := []*TreeNode{root}
15+
for n := len(q); n > 0; n = len(q) {
16+
for i := 0; i < n; i++ {
17+
node := q[0]
18+
q = q[1:]
19+
if i == n-1 {
20+
ans = append(ans, node.Val)
21+
}
22+
if node.Left != nil {
23+
q = append(q, node.Left)
24+
}
25+
if node.Right != nil {
26+
q = append(q, node.Right)
27+
}
28+
}
29+
}
30+
return ans
31+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
public List<Integer> rightSideView(TreeNode root) {
18+
List<Integer> ans = new ArrayList<>();
19+
if (root == null) {
20+
return ans;
21+
}
22+
Queue<TreeNode> q = new ArrayDeque<>();
23+
q.offer(root);
24+
while (!q.isEmpty()) {
25+
int n = q.size();
26+
for (int i = 0; i < n; i++) {
27+
TreeNode node = q.poll();
28+
if (i == n - 1) {
29+
ans.add(node.val);
30+
}
31+
if (node.left != null) {
32+
q.offer(node.left);
33+
}
34+
if (node.right != null) {
35+
q.offer(node.right);
36+
}
37+
}
38+
}
39+
return ans;
40+
}
41+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def rightSideView(self, root: TreeNode) -> List[int]:
9+
ans = []
10+
if not root:
11+
return ans
12+
d = deque([root])
13+
while d:
14+
n = len(d)
15+
for i in range(n):
16+
node = d.popleft()
17+
if i == n - 1:
18+
ans.append(node.val)
19+
if node.left:
20+
d.append(node.left)
21+
if node.right:
22+
d.append(node.right)
23+
return ans

0 commit comments

Comments
 (0)