leetcode-199

199. 二叉树的右视图

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例

1
2
3
4
5
6
7
8
9
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

1 <---
/ \
2 3 <---
\ \
5 4 <---

解法

层序遍历

进行层序遍历,取每一层的最后一个。

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
class Solution:
def bfs(self,root:TreeNode):

stack = list()

stack.append(root)

res = []
while stack:
cur_res = []
q_length = len(stack)
for i in range(q_length):
cur = stack.pop(0)
cur_res.append(cur.val)

if cur.left:
stack.append(cur.left)
if cur.right:
stack.append(cur.right)
res.append(cur_res)

res = [c[-1] for c in res]
# print(res)
return res

def rightSideView(self, root: TreeNode) -> List[int]:
# 层序遍历
if not root:
return []

return self.bfs(root)

深度遍历

进行反先序遍历,根右左,保证每次先遍历右子树,进入每一层时,添加每一层的第一个元素。

二叉树的右视图 - 二叉树的右视图 - 力扣(LeetCode) (leetcode-cn.com)

摘自题解评论区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
res = []
# 层序遍历
if not root:
return []

def dfs(root:TreeNode,depth:int):
if not root:
return 0
# 先访问 当前节点,再递归地访问 右子树 和 左子树。
if len(res) == depth:
res.append(root.val)
depth+=1
dfs(root.right,depth)
dfs(root.left,depth)
dfs(root,0)
return res
作者

bd160jbgm

发布于

2021-06-04

更新于

2021-06-04

许可协议