Tree - Binary Tree Right Side View
All diagrams presented herein are original creations, meticulously designed to enhance comprehension and recall. Crafting these aids required considerable effort, and I kindly request attribution if this content is reused elsewhere.
Difficulty : Easy
BFS, deque()
Problem
Given the root
of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
Example 1:
1
2
Input: root = [1,2,3,null,5,null,4]
Output: [1,3,4]
Example 2:
1
2
Input: root = [1,null,3]
Output: [1,3]
Solution
This problem can be easily solved if we just look at the visualization.So we can just use bfs()
here and after traversing each level just take the last entry from the queue, which will always be the right most node as displayed here.
Instantiate the queue
1
queue = collections.deque([root])
Define the final result array
1
result_arr = []
Get the last node from queue
Get the last node using -1
and append the node value to the result_arr
1
2
while queue:
result_arr.append(queue[-1].val)
Traverse the tree
Traverse through each node and keep adding the next level to the queue. Every time the for loop completes, append the last entry to the result_arr
.
1
2
3
4
5
6
7
8
for _ in range(len(queue)):
node = queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return result_arr
Final Code
Here is the full code.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
def right_side_view(root:TreeNode):
queue = collections.deque([root])
result_arr = []
while queue:
result_arr.append(queue[-1].val)
for _ in range(len(queue)):
node=queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return result_arr