题目链接
题目描述:
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <—
/
2 3 <—
\
5 4 <—
解题思路:
层序遍历,找出每层的最右边的节点
为了找到每层的节点,采用另一个列表存储当前层节点的子节点
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if not root:
return []
ll=[root]
result=[]
while ll:
next_level=[]
result.append(ll[-1].val)
for node in ll:
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)
ll=next_level
return result
官方题解:
深度优先:先访问右子树
采用栈存储
class Solution(object):
def rightSideView(self, root):
rightmost_value_at_depth = dict() # 深度为索引,存放节点的值
max_depth = -1
stack = [(root, 0)]
while stack:
node, depth = stack.pop()
if node is not None:
# 维护二叉树的最大深度
max_depth = max(max_depth, depth)
# 如果不存在对应深度的节点我们才插入
rightmost_value_at_depth.setdefault(depth, node.val)
stack.append((node.left, depth+1))
stack.append((node.right, depth+1))
return [rightmost_value_at_depth[depth] for depth in range(max_depth+1)]