199. Binary Tree Right Side View

DFS 先把最右边的那些node加进去,然后再依序往左边找,确保遍历所有level

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def dfs(self, root, result, level):
        if not root: return
        # 确保只有新到的level会加值进result里面
        if level == len(result): result.append(root.val)
        # 先traverse右边,确保右子树的都加进去
        self.dfs(root.right, result, level+1)
        # 再左边,寻找遗漏的
        self.dfs(root.left, result, level+1)
    
    def rightSideView(self, root: TreeNode) -> List[int]:
        res = []
        self.dfs(root, res, 0)
        return res

既然是二叉树层序遍历,也可以 BFS 做,用 queue,每层都先把当层node的子节点加进queue里面,(这题需要把最右侧node记录下来),下一轮再把queue里的节点进行同样的操作。

class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
    
        res, queue = [], []
        if not root: return res
        queue.append(root)
        
        while queue:
            level = len(queue)
            # 
            res.append(queue[-1].val)
            for i in range(level):
                curNode = queue.pop(0)
                if curNode.left: queue.append(curNode.left)
                if curNode.right: queue.append(curNode.right)
        return res

Last updated

Was this helpful?