g0601_0700.s0623_add_one_row_to_tree.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0601_0700.s0623_add_one_row_to_tree;
// #Medium #Depth_First_Search #Breadth_First_Search #Tree #Binary_Tree
// #2022_03_21_Time_0_ms_(100.00%)_Space_45.6_MB_(29.97%)
import com_github_leetcode.TreeNode;
/*
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
/**
* 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 node `cur` at the depth `depth - 1`, create two tree nodes with value `val` as `cur`'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 depth `depth - 1` at all, then create a tree node with value `val` as the new root of the whole original tree, and the original tree is the new root's left subtree.
*
* **Example 1:**
*
* ![](https://assets.leetcode.com/uploads/2021/03/15/addrow-tree.jpg)
*
* **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:**
*
* ![](https://assets.leetcode.com/uploads/2021/03/11/add2-tree.jpg)
*
* **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`
**/
public class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if (depth == 1) {
TreeNode newRoot = new TreeNode(val);
newRoot.left = root;
return newRoot;
}
dfs(root, depth - 2, val);
return root;
}
private void dfs(TreeNode node, int depth, int val) {
if (depth == 0) {
TreeNode left = new TreeNode(val);
TreeNode right = new TreeNode(val);
left.left = node.left;
right.right = node.right;
node.left = left;
node.right = right;
} else {
if (node.left != null) {
dfs(node.left, depth - 1, val);
}
if (node.right != null) {
dfs(node.right, depth - 1, val);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy