虽然做出来了,但是好像效果并不是很好。。
public Node connect(Node root) { if(root == null){ return null; } //构建一个队列 Queue<Node> queue = new ArrayDeque<>(); queue.add(root); int n = 1; Node node = null; int i = 0; while(!queue.isEmpty()){ while(i<Math.pow(2,n)-1){ node = queue.poll(); if(node != null) { if(i != Math.pow(2,n)-2) { node.next = queue.peek(); }else{ node.next = null; } if(node.left != null) { queue.add(node.left); } if(node.right != null) { queue.add(node.right); } } i++; } n++; } return root; }
用队列以及两层循环嵌套完成。
别人的例子:
public Node connect(Node root) { if(root == null) return null; if(root.left != null){ root.left.next = root.right; } if(root.right != null && root.next != null){ root.right.next = root.next.left; } connect(root.left); connect(root.right); return root; }
多巧妙啊这个!!!
——2020.7.3