623. Add One Row to Tree
Medium
Given the root
of a binary tree and two integers val
and depth
, add a row of nodes with value val
at the given depth depth
.
Note that the root
node is at depth 1
.
The adding rule is:
- Given the integer
depth
, for each not null tree nodecur
at the depthdepth - 1
, create two tree nodes with valueval
ascur
's left subtree root and right subtree root. -
cur
's original left subtree should be the left subtree of the new left subtree root. -
cur
's original right subtree should be the right subtree of the new right subtree root. - If
depth == 1
that means there is no depthdepth - 1
at all, then create a tree node with valueval
as the new root of the whole original tree, and the original tree is the new root's left subtree.
Example 1:
- Input: root = [4,2,6,3,1,5], val = 1, depth = 2
- Output: [4,1,1,2,null,null,6,3,1,5]
Example 2:
- Input: root = [4,2,null,3,1], val = 1, depth = 3
- Output: [4,2,null,1,1,3,null,null,1]
Constraints:
- The number of nodes in the tree is in the range
[1, 104]
. - The depth of the tree is in the range
[1, 104]
. -100 <= Node.val <= 100
-105 <= val <= 105
1 <= depth <= the depth of tree + 1
Solution
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @param Integer $val
* @param Integer $depth
* @return TreeNode
*/
function addOneRow($root, $val, $depth) {
return $this->dfs($root, $val, $depth, 1, false);
}
function dfs($root, $val, $depth, $curr, $isLeft) {
if ($root == null) {
if ($depth == 1) {
$root = new TreeNode($val);
}
return $root;
}
if ($depth == 1 && $root != null) {
$newNode = new TreeNode($val);
$newNode->left = $root;
$root = $newNode;
return $newNode;
}
if ($curr + 1 == $depth) {
$newNode = new TreeNode($val);
$newNode->left = $root->left;
$root->left = $newNode;
$newNode1 = new TreeNode($val);
$newNode1->right = $root->right;
$root->right = $newNode1;
return $root;
}
$this->dfs($root->left, $val, $depth, $curr + 1, true);
$this->dfs($root->right, $val, $depth, $curr + 1, false);
return $root;
}
}
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!