-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path116.Connect.cs
77 lines (68 loc) · 1.97 KB
/
116.Connect.cs
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// 116. Populating Next Right Pointers in Each Node
// You are given a perfect binary tree where all leaves are on the same level, and every parent has two children.
// The binary tree has the following definition:
// struct Node {
// int val;
// Node *left;
// Node *right;
// Node *next;
// }
// Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be
// set to NULL.
// Initially, all next pointers are set to NULL.
// Example 1:
// Input: root = [1,2,3,4,5,6,7]
// Output: [1,#,2,3,#,4,5,6,7,#]
// Explanation: Given the above perfect binary tree (Figure A), your function should populate each next pointer to point to
// Example 2:
// Input: root = []
// Output: []
/*
// Definition for a Node.
public class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
}
*/
public class Solution {
public Node Connect(Node root) {
if(root == null)
return null;
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(root);
int level = 0;
while(queue.Count > 0){
int breadth = (int)Math.Pow(2, level) ;
while(breadth > 0 && queue.Count > 0){
Node node = queue.Dequeue();
if(breadth == 1 || queue.Count == 0){
node.next = null;
}
else{
node.next = queue.Peek();
}
if(node.left != null){
queue.Enqueue(node.left);
}
if(node.right != null){
queue.Enqueue(node.right);
}
breadth--;
}
level++;
}
return root;
}
}