import java.util.*;
/**
 * 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;
        }

        TreeLinkNode leftmost  = root ;
         while (leftmost.left  != null) {


            TreeLinkNode node = leftmost ;

                while (node  != null) {
                    node.left.next =   node.right;

                 if(node.next != null) {
                     node.right.next = node.next.left;
                 }
                    node = node.next;
                }

                leftmost =  leftmost.left ;


        }


    }

  // 使用队列辅助
    // public void connect(TreeLinkNode root) {

    //     if (root == null) {
    //         return;
    //     }
    //    Queue<TreeLinkNode> queue = new LinkedList<>();
    //     queue.add(root);
    //     TreeLinkNode poll =null ;


    //     while (queue.size() > 0) {

    //         int size = queue.size();
    //         for (int i = 0 ; i < size; i++ ) {
    //              poll = queue.poll();
    //             if(i == size - 1){
    //                 poll.next = null;
    //             }else{
    //                 poll.next = queue.peek();
    //             }

    //             if (poll.left != null) {
    //                 queue.offer  (poll.left);
    //             }
    //             if (poll.right != null) {
    //                 queue.offer  (poll.right);
    //             }
    //         }


    //     }

    // }


}

思路:1.按层解析

2.使用队列辅助

在符合完美 二叉树时,优先 方案1,因为只使用两个变量 无需额外引入 队列存储

方案2,变动后可以处理 非完美二叉树 的场景,但需要额外的空间