Problem
Given a binary tree, return the smallest subtree that has all the deepest nodes of the original tree. The deepest node is a node having maximum depth in the tree. You only need to return the root of the output subtree in the code.
Sample Input
Sample Output
20
Explanation
The deepest nodes are ‘15’ and ‘7,’ and the root of this smallest subtree is ‘20’
Approach
Using DFS, traverse the Binary Tree recursively. Determine the depth of each node's left and right subtrees. Traverse the left subtree if the depth of the left subtree is greater than the depth of the right subtree. Traverse the right subtree if the depth of the right subtree is greater than the depth of the left subtree. Otherwise, return the currently selected node.
Complexity Analysis
The time complexity is O(N), and the space complexity is also O(N)
C++ Programming
#include <bits/stdc++.h> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int data) { this->val = data; left = NULL; right = NULL; } }; int getDepth(TreeNode* root) { if (!root) return 0; // If current node is a leaf node if (root->left == NULL && root->right == NULL) return 1; return max(getDepth(root->left), getDepth(root->right)) + 1; } void solve(TreeNode* root, TreeNode*& ans) { if (!root) return; // height of left subtree int left = getDepth(root->left); // height of right subtree int right = getDepth(root->right); // If height of left subtree is more if (left > right) { // Traverse left subtree solve(root->left, ans); } // If height of right subtree is more else if (right > left) { solve(root->right, ans); } else { // Return current node ans = root; return; } } int main() { struct TreeNode* root= new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); TreeNode* ans = NULL; solve(root, ans); cout << ans->val; return 0; }
Output
1
Java Programming
import java.util.*; class Solution { static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int data) { this.val = data; left = null; right = null; } }; static int getDepth(TreeNode root) { if (root == null) return 0; // If current node is a leaf node if (root.left == null && root.right == null) return 1; return Math.max(getDepth(root.left),getDepth(root.right)) + 1; } static TreeNode solve(TreeNode root, TreeNode ans) { if (root == null) return ans; // height of left subtree int left = getDepth(root.left); // height of right subtree int right = getDepth(root.right); // If height of left subtree is more if (left > right) { // Traverse left subtree ans = solve(root.left, ans); } // If height of right subtree is more else if (right > left) { ans = solve(root.right, ans); } else { ans = root; return ans; } return ans; } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); TreeNode ans = null; ans = solve(root, ans); System.out.print(ans.val); } }
Output
1
Python Programming
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None def getDepth(root): if (not root): return 0 # If current node is a leaf node if (root.left == None and root.right == None): return 1 return max(getDepth(root.left), getDepth(root.right)) + 1 def solve(root): global ans if (not root): return # Stores height of left subtree left = getDepth(root.left) # Stores height of right subtree right = getDepth(root.right) # If height of left subtree is more if (left > right): # Traverse left subtree solve(root.left) # If height of right subtree is more elif (right > left): solve(root.right) else: ans = root return root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) ans = None solve(root) print(ans.val)
Output
1
People are also reading:
- Find K-th Smallest Element in BST
- Count subarrays with given XOR
- Longest Substring without repeating characters
- Python Take list as an input from a user
- Find MSB in O(1)
- Nth root of M
- Print all subarrays of an array having distinct elements
- Count Inversions
- Hybrid QuickSort Algorithm
- In-place vs out-of-place algorithms
Leave a Comment on this Post