LeetCode 199.二叉树的右视图——Python实现(广度优先搜索、深度优先搜索)
1、广度优先搜索
class Solution(object):
def rightSideView(self, root: TreeNode):
if root is None:
return []
# 通过队列来存储BFS的节点,然后获得每一层的最后一个节点
queue = [root]
view_list = []
while queue:
view_list.append(queue[-1].val)
size = len(queue)
for i in range(0, size, 1):
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return view_list
2、深度优先搜索
利用dfs的方式,每次都沿节点的子树搜索,根据节点所在的层数以及是否已经加入节点了,决定是否加入当前节点
class Solution(object):
def rightSideView(self, root: TreeNode):
def dfs(node, level, view_list):
if node is None:
return
# 判断当前是否已经有相应层的节点加入了,如果有的话则继续向下寻找,如果没有的话,则加入
# 因为是从右子树开始遍历的,所以最后看到的会是右视图
if level > len(view_list):
view_list.append(node.val)
dfs(node.right, level + 1, view_list)
dfs(node.left, level + 1, view_list)
if root is None:
return []
view_list = []
dfs(root, 1, view_list)
return view_list
版权声明:本文为u011412768原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。