一、问题描述
Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
- You may only use constant extra space.
For example,
Given the following binary tree,
1 / \ 2 3 / \ \ 4 5 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL
二、问题分析
利用算法leetcode:Binary Tree Level Order Traversal 【Java】的解题技巧。
三、算法代码
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void connect(TreeLinkNode root) {
if(root == null){
return;
}
List<TreeLinkNode> pre = new ArrayList<TreeLinkNode>();//保存树中pre层树结点
pre.add(root);
int preLength = 0;
List<TreeLinkNode> cur = null;//保存树中当前层树结点
TreeLinkNode curNode = null;
while(pre.size() != 0){
preLength = pre.size();
cur = new ArrayList<TreeLinkNode>();
for(int i = 0; i <= preLength - 1; i++){
curNode = pre.get(i);
if(i == preLength - 1){ //如果是某一层的最后一个结点,则把它的next域置为null
curNode.next = null;
}else{
curNode.next = pre.get(i + 1);
}
if(curNode.left != null){
cur.add(curNode.left);
}
if(curNode.right != null){
cur.add(curNode.right);
}
}
pre = cur;
}
}
}