Link: 545. Boundary of Binary Tree - Medium

Question

Restate the problem

  • Given the root of a binary tree
  • Return a list of node values representing the boundary of the tree.
  • The boundary consists of:
    1. The root node.
    2. The left boundary (excluding leaf nodes).
    3. All leaf nodes from left to right.
    4. The right boundary (excluding leaf nodes), in reverse order.

Method 1
Method 2

Method

Approach

  • root
  • is_leaf
  • dfs_leftmost
  • dfs_leaves
  • dfs_rightmost

Complexity

  • Time Complexity: O(n)
  • Space Complexity: O(h)

Edge Case

Code

# 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 boundaryOfBinaryTree(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        
        res = [root.val]
 
        def is_leaf(node):
            if not node:
                return False
            if node.left == None and node.right == None:
                return True
            else:
                return False
        
        def dfs_leftmost(node):
            if not node or is_leaf(node):
                return 
            res.append(node.val)
            if node.left:
                dfs_leftmost(node.left)
            else:
                dfs_leftmost(node.right)
        
        def dfs_leaves(node):
            if not node:
                return
            
            if is_leaf(node) and node != root:
                res.append(node.val)
                return
 
            dfs_leaves(node.left)
            dfs_leaves(node.right)
        
        def dfs_rightmost(node):
            if not node or is_leaf(node):
                return
            if node.right:
                dfs_rightmost(node.right)
            else:
                dfs_rightmost(node.left)
            
            res.append(node.val)
 
        dfs_leftmost(root.left)
        dfs_leaves(root)
        dfs_rightmost(root.right)
 
        return res

History

Jan-20-2026 Peeked, no idea