Problem : https://leetcode.com/problems/binary-tree-right-side-view/
Use BFS to traverse the tree
# 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: TreeNode) -> List[int]:
if not root : return []
result = []
queue = deque([root])
while queue:
N = len(queue)
for i in range(N):
node = queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
# append the right-most node value
if i == N-1:
result.append(node.val)
return result
DFS Solution:
# 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: TreeNode) -> List[int]:
if not root: return []
result = []
# dfs
stack = [(root, 0)]
while stack:
node, level = stack.pop()
if level == len(result):
result.append(node.val)
if node.left:
stack.append((node.left, level+1))
if node.right:
stack.append((node.right, level+1))
return result
Edited on 05/31/2021. Add DFS solution.
No comments:
Post a Comment