继续思考"Populating Next Right Pointers in Each Node".这道题
如果给定的树可以是任意的二叉树呢?你之前的给出的算法还有效吗?
注意:
你只能使用常量的额外内存空间
层次遍历方法简单修改之后就能解决这道题目。
改写之前的递归做法应该也能解决问题。

层次遍历也完全不需要很麻烦,下面的代码很精简,值得学习。
链接:https://www.nowcoder.com/questionTerminal/f18bc13a954f4389900b56e545feca6e?f=discussion
来源:牛客网

class Solution {
public:
    void connect(TreeLinkNode *root) {
        //利用层序遍历思想,需要注意的是对每层的节点都进行处理
        if(root==NULL) return;
        queue<TreeLinkNode*> que;
        que.push(root);
        while(!que.empty()){
            int n=que.size();
            for(int i=0;i<n;i++){
                TreeLinkNode* tmp=que.front();
                que.pop();
                if(tmp->left) que.push(tmp->left);
                if(tmp->right) que.push(tmp->right);
                if(i!=n-1) tmp->next=que.front();
                else tmp->next=NULL;
            }
        }
    }
};

还有一个理解起来比较费事,而书写的关键节点在于把握root.next这个属性

链接:https://www.nowcoder.com/questionTerminal/f18bc13a954f4389900b56e545feca6e?f=discussion
来源:牛客网
//虽然两个while循环中都有root,但是其代表的含义是不一样,第二层的root更多的是一个循环使用的变量,换一种新的写***更加容易理解。
public void connect(TreeLinkNode root) {
        while (root != null) {// 这里的root代表某一层的第一个节点
            //tmpLevelFirst为新建立的每层第一个节点(为了方便后面遍历当前行节点)
            TreeLinkNode tmpLevelFirst = new TreeLinkNode(0);
            TreeLinkNode cur = tmpLevelFirst;
            while (root != null) {//主要利用节点的next的属性进行层次遍历
                if (root.left != null) {
                    cur.next