0116. Populating Next Right Pointers in Each Node
Description
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
ac1: iterative
ac2: recursive
Last updated
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
Last updated
**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 its next right node, just like in Figure B. The serialized output is in level order as connected by the next pointers, with '#' signifying the end of each level.**Input:** root = []
**Output:** []public class Solution {
public void connect(TreeLinkNode root) {
//edge case
if (root == null) return;
// record: leftParent, currParent, curr
TreeLinkNode leftParent, currParent, curr;
TreeLinkNode dummy = new TreeLinkNode(0);
leftParent = root;
while (leftParent.left != null) {
currParent = leftParent;
curr = dummy;
while (currParent != null) {
currParent.left.next = currParent.right;
curr.next = currParent.left;
curr = currParent.right;
currParent = currParent.next;
}
leftParent = leftParent.left;
}
}
}// Jesus... what a smart solution, beautiful...
public class Solution {
public void connect(TreeLinkNode root) {
//edge case
if (root == null || root.left == null) return;
root.left.next = root.right;
if (root.next != null) {
root.right.next = root.next.left;
}
connect(root.left);
connect(root.right);
}
}