每个节点的右向指针
该题用递归解法相比较代码更简洁
题目链接:每个节点的右向指针
思路:
这里的思路和我前面写的层次遍历二叉树的文章基本相同,可以参考之前的思路。
public void connect(TreeLinkNode root) {
if(root==null) {
return;
}
//对该二叉树进行层次遍历
//需要一个队列
LinkedList<TreeLinkNode> queue = new LinkedList<TreeLinkNode>();
//当前层和下一层的节点数
int cur_node = 0,next_node = 0;
//根节点入队列,遍历
queue.offer(root);
++cur_node;
TreeLinkNode node_front = null;
TreeLinkNode node_rear = null;
while(!queue.isEmpty()) {
node_front = queue.poll();//先出来第一个节点
--cur_node;
node_front.next = null;
//遍历左右子树
if(node_front.left!=null) {
queue.offer(node_front.left);
++next_node;
}
if(node_front.right!=null) {
queue.offer(node_front.right);
++next_node;
}
while(cur_node!=0) {
//遍历每一层
//出队列
node_rear = queue.poll();
--cur_node;
if(node_rear.left!=null) {
queue.offer(node_rear.left);
++next_node;
}
if(node_rear.right!=null) {
queue.offer(node_rear.right);
++next_node;
}
node_front.next = node_rear;
node_front = node_rear;
}
if(node_rear!=null) {
node_rear.next = null;
}
cur_node = next_node;
next_node = 0;
}
}