同样是层次遍历的解法,但是我的空间负责度较高,明明有next指针可以利用next做层次遍历
先贴我自己的代码
public class Solution {
public void connect(TreeLinkNode root) {
List<List<TreeLinkNode>> tree = new ArrayList<List<TreeLinkNode>>();
if(root != null)
tree.add(new ArrayList(){{add(root);}});
while(tree.size() > 0){
List<TreeLinkNode> level = tree.get(0);
List<TreeLinkNode> newLevel = new ArrayList<TreeLinkNode>();
tree.remove(0);
for(int i = 0;i<level.size(); i++){
TreeLinkNode node = level.get(i);
if(node.left != null)
newLevel.add(node.left);
if(node.right != null)
newLevel.add(node.right);
if(i < level.size() -1)
node.next = level.get(i+1);
}
}
}
}
再贴一个讨论高票的答案,我感觉有一些问题,边界值例如,每一层的左节点不存在的情况,无法接着遍历了就,先留着看,以后复习用
void connect(TreeLinkNode *root) {
if (root == NULL) return;
TreeLinkNode *pre = root;
TreeLinkNode *cur = NULL;
while(pre->left) {
cur = pre;
while(cur) {
cur->left->next = cur->right;
if(cur->next) cur->right->next = cur->next->left;
cur = cur->next;
}
pre = pre->left;
}
}
2017/2/23