Given a binary tree
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *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 toNULL
.
Initially, all next pointers are set to NULL
.
Note:
- You may only use constant extra space.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1
/ \
2 3
/ \ / \
4 5 6 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ / \
4->5->6->7 -> NULL
思路: 就是主要连接两个,一个是root.left != NULL, root.right != null ,左边节点往右,右边节点往右,然后root往后挪动,当前层连接完了,root变成firstNode.left;
class Solution {
public Node connect(Node root) {
if(root == null) {
return null;
}
Node head = root;
while(root != null) {
Node firstNode = root;
while(root != null) {
if(root.left != null) {
root.left.next = root.right;
}
if(root.right != null && root.next != null) {
root.right.next = root.next.left;
}
root = root.next;
}
root = firstNode.left;
}
return head;
}
}