层序遍历即可解决。二叉树的层序遍历是每一层从左到右这样一个顺序进行遍历,所以我们在遍历每一层时,取出最右的一个节点即可。这里用一个队列来进行层序遍历,保存每一层的所有节点,那么每一次取的就是队列中的最后一个元素,就是从右边可以看到的元素。代码基本和层序遍历相同。
from collections import deque
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if not root:
return []
res = []
q = deque([root, ])
while q:
res.append(q[-1].val)
length = len(q)
for _ in range(length):
node = q.popleft()
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return res