LeetCode 0742. Closest Leaf in a Binary Tree Solution in Java, C++, Python & Go | Explanation + Code

CoderIndeed
0
0742. Closest Leaf in a Binary Tree

Description

Given the root of a binary tree where every node has a unique value and a target integer k, return the value of the nearest leaf node to the target k in the tree.

Nearest to a leaf means the least number of edges traveled on the binary tree to reach any leaf of the tree. Also, a node is called a leaf if it has no children.

 

Example 1:

Input: root = [1,3,2], k = 1
Output: 2
Explanation: Either 2 or 3 is the nearest leaf node to the target of 1.

Example 2:

Input: root = [1], k = 1
Output: 1
Explanation: The nearest leaf node is the root node itself.

Example 3:

Input: root = [1,2,3,4,null,null,null,5,null,6], k = 2
Output: 3
Explanation: The leaf node with value 3 (and not the leaf node with value 6) is nearest to the node with value 2.

 

Constraints:

  • The number of nodes in the tree is in the range [1, 1000].
  • 1 <= Node.val <= 1000
  • All the values of the tree are unique.
  • There exist some node in the tree where Node.val == k.

Solutions

Solution 1: DFS + BFS

First, we use depth-first search to construct an undirected graph g, where g[node] represents the set of nodes adjacent to the node node. Then we start a breadth-first search from node k until we find a leaf node, which is the answer.

The time complexity is O(n), and the space complexity is O(n). Where n is the number of nodes in the binary tree.

PythonJavaC++Go
# 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 findClosestLeaf(self, root: Optional[TreeNode], k: int) -> int: def dfs(root: Optional[TreeNode], fa: Optional[TreeNode]): if root: g[root].append(fa) g[fa].append(root) dfs(root.left, root) dfs(root.right, root) g = defaultdict(list) dfs(root, None) q = deque(node for node in g if node and node.val == k) vis = set(q) while 1: node = q.popleft() if node: if node.left == node.right: return node.val for nxt in g[node]: if nxt not in vis: vis.add(nxt) q.append(nxt)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !