116. Populating Next Right Pointers in Each Node

 

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 to NULL.

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



默认每个节点的next 都是空。
2层循环,第一层循环是层数,用level_start控制,
第二层循环,循环每层的每个节点,来构建next 指针,
构建next指针时,有3种情况:1 左指针指向右指针
2 右指针不是当层最末尾的指针,右指针指向父亲节点next的左指针。
3
右指针是当层最末尾的指针,不用处理,因为默认每个节点的next都是指向null的。

 1 public class Solution {
 2     public void connect(TreeLinkNode root) {
 3         TreeLinkNode level_start=root;
 4         while(level_start!=null){
 5             TreeLinkNode cur=level_start;
 6             while(cur!=null){
 7                 if(cur.left!=null) cur.left.next=cur.right;
 8                 if(cur.right!=null && cur.next!=null) cur.right.next=cur.next.left;
 9                 
10                 cur=cur.next;
11             }
12             level_start=level_start.left;
13         }
14     }
15 }
原文地址:https://www.cnblogs.com/zle1992/p/7784711.html