LeetCode刷题实战199:二叉树的右视图
共 5359字,需浏览 11分钟
·
2021-03-02 13:57
Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
题意
示例
解题
思路一:广度优化搜索
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if root == None:
return []
# 导入 deque 创建队列
from collections import deque
queue = deque([root])
res = []
while queue:
size = len(queue)
# 这里用 size 记录二叉树每层的节点数,
for i in range(size):
# 弹出节点
node = queue.popleft()
# 先将左节点入队
if node.left != None:
queue.append(node.left)
# 再将右节点入队
if node.right != None:
queue.append(node.right)
# 队列先入先出,如果 i 等于 size - 1,
# 那么这里就是最右边的节点,这个就要得到的结果,将其放入返回列表中
if i == size - 1:
res.append(node.val)
return res
思路二:深度优化搜索
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
res = []
def _dfs(node, depth):
if node == None:
return []
# res 的索引表示二叉树的深度
# 若当前的深度的节点不存在于 res 中,
# 表示该层的最右边节点还未将其添加到 res 中
# 将其加入到节点中
if depth == len(res):
res.append(node.val)
# 往一下层访问,先访问右子树,在访问左子树
depth += 1
_dfs(node.right, depth)
_dfs(node.left, depth)
_dfs(root, 0)
return res