199. Binary Tree Right Side ViewΒΆ
The right side view of a binary tree consists of the nodes that are last visible at each level when the tree is viewed from the right. This naturally leads to a level-order traversal, where we add the last node in each level.
Runtime Complexity
Time: \(O(n)\), where \(n\) is the number of nodes in the tree
Space: \(O(n)\), for the queue used during traversal
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root: return []
q = deque([root])
side = []
while len(q) > 0:
size = len(q)
for i in range(size):
node = q.pop()
if i == size-1:
side.append(node.val)
if node.left:
q.appendleft(node.left)
if node.right:
q.appendleft(node.right)
return side
func rightSideView(root *TreeNode) []int {
if root == nil {
return []int{}
}
queue := make(chan *TreeNode, 100)
queue <- root
var side []int
var size, i int
var node *TreeNode
for len(queue) > 0 {
size = len(queue)
for i = 0; i < size; i++ {
node = <-queue
if i == size-1 {
side = append(side, node.Val)
}
if node.Left != nil {
queue <- node.Left
}
if node.Right != nil {
queue <- node.Right
}
}
}
return side
}