Similar Problems
Similar Problems not available
Add One Row To Tree - Leetcode Solution
Companies:
LeetCode: Add One Row To Tree Leetcode Solution
Difficulty: Medium
Topics: binary-tree tree depth-first-search breadth-first-search
The problem statement can be found here: https://leetcode.com/problems/add-one-row-to-tree/
Problem Description:
Given the root of a binary tree, then value v and depth d, insert a row of nodes with value v at the given depth d.
The root node is at depth 1.
Example 1:
Input:
4
/
2 6
/ \ /
3 1 5 7
v = 1, d = 2
Output:
4
/
1 1
/ \ /
2 6 5 7
/
3 1
Example 2:
Input:
4
/
2
/ \
3 1
v = 1, d = 3
Output:
4
/
2
/
3 1
/
1
Approach:
-
Create a recursive function that takes the node, level, the value to be inserted, and the target depth as arguments.
-
Base case:
- If the current level is one less than the target depth, we need to insert a new row of nodes at this level.
- Create new nodes with the given value and set their left and right children to be the previous left and right children of the current node.
-
Recursive case:
- Recursively call the function on the left and right children of the current node if they exist, decrementing the level by one each time.
-
Call the recursive function on the root node with the initial level being 1.
-
Return the modified root node.
Solution:
class Solution {
public:
TreeNode* addOneRow(TreeNode* root, int v, int d) {
if(d == 1){
// create new root node with v as the value and set its left child as the previous root node
TreeNode* newRoot = new TreeNode(v);
newRoot->left = root;
return newRoot;
}
addOneRowDFS(root, 1, v, d);
return root;
}
void addOneRowDFS(TreeNode* node, int level, int v, int d){
if(node == NULL){
return;
}
if(level == d-1){
// create new left node with v as the value and set its left and right children
TreeNode* newLeft = new TreeNode(v);
newLeft->left = node->left;
node->left = newLeft;
// create new right node with v as the value and set its left and right children
TreeNode* newRight = new TreeNode(v);
newRight->right = node->right;
node->right = newRight;
}
else{
addOneRowDFS(node->left, level+1, v, d);
addOneRowDFS(node->right, level+1, v, d);
}
}
};
Time Complexity:
Since we are traversing all the nodes in the given tree, the time complexity is O(n), where n is the number of nodes in the tree.
Space Complexity:
The space complexity is O(h), where h is the height of the tree. This is because the recursive function call stack will have at most h elements.
Add One Row To Tree Solution Code
1