-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path9. Add One Row to Tree
59 lines (58 loc) · 1.53 KB
/
9. Add One Row to Tree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Solution {
public TreeNode addOneRow(TreeNode root, int v, int d) {
if(d == 1){
TreeNode node = new TreeNode(v);
node.left = root;
return node;
}
insert(root,v,d,1);
return root;
}
public void insert(TreeNode node, int val, int depth, int currentDepth) {
if(node == null) return;
if(depth-1 == currentDepth) {
TreeNode t = node.left;
node.left = new TreeNode(val);
node.left.left = t;
t = node.right;
node.right = new TreeNode(val);
node.right.right = t;
}
else {
insert(node.left, val, depth, currentDepth+1);
insert(node.right, val, depth, currentDepth+1);
}
}
}
class Solution {
public TreeNode addOneRow(TreeNode root, int v, int d) {
if(d == 1){
TreeNode node = new TreeNode(v);
node.left = root;
return node;
}
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
int currentDepth = 1;
while(currentDepth < d-1) {
Queue<TreeNode> temp = new LinkedList<>();
while(!q.isEmpty()){
TreeNode node = q.remove();
if(node.left != null) temp.add(node.left);
if(node.right != null) temp.add(node.right);
}
q = temp;
currentDepth++;
}
while(!q.isEmpty()) {
TreeNode node = q.remove();
TreeNode temp = node.left;
node.left = new TreeNode(v);
node.left.left = temp;
temp = node.right;
node.right = new TreeNode(v);
node.right.right = temp;
}
return root;
}
}