BFS
My Solution:
python
# 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 rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root: return []
ans = []
queue = [root]
while queue:
n = len(queue)
cur_level = []
while n:
cur = queue.pop(0)
cur_level.append(cur.val)
if cur.left: queue.append(cur.left)
if cur.right: queue.append(cur.right)
n -= 1
ans.append(cur_level[-1])
return ans
DFS
这个解法更类似于 104. 求depth中的用额外变量存储高度的解法
python
# 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 rightSideView(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def dfs(root, d):
if not root:
return
d += 1
if d > len(ans):
ans.append(root.val)
dfs(root.right, d)
dfs(root.left, d)
dfs(root, 0)
return ans
python
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def dfs(node: Optional[TreeNode], depth: int) -> None:
if node is None:
return
if depth == len(ans): # 这个深度首次遇到
ans.append(node.val)
dfs(node.right, depth + 1) # 先递归右子树,保证首次遇到的一定是最右边的节点
dfs(node.left, depth + 1)
dfs(root, 0)
return ans
作者:灵茶山艾府
链接:https://leetcode.cn/problems/binary-tree-right-side-view/solutions/2015061/ru-he-ling-huo-yun-yong-di-gui-lai-kan-s-r1nc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。