cbangchen
11/10/2018 - 5:54 PM

116. Populating Next Right Pointers in Each Node - DifficultyMedium - 2018.9.12

/**
 * Definition for binary tree with next pointer.
 * struct TreeLinkNode {
 *  int val;
 *  TreeLinkNode *left, *right, *next;
 *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
 * };
 */
class Solution {
public:
    void connect(TreeLinkNode *root) {
        if (!root) {
            return;
        }
        // 每一行的起点
        TreeLinkNode *entryNode = root;
        // 当前处理节点
        TreeLinkNode *curNode = root;
        while (1) {
            if (!curNode->left || !curNode->right) {
                break;
            }
            curNode->left->next = curNode->right;
            if (curNode->next) {
                // 链接两个不同父节点之间的子节点
                curNode->right->next = curNode->next->left;
                curNode = curNode->next;
                continue;
            }
            if (!(entryNode->left)) {
                break;
            }
            entryNode = entryNode->left;
            curNode = entryNode;
        }
    }
};  

/**
 * Definition for binary tree with next pointer.
 * struct TreeLinkNode {
 *  int val;
 *  TreeLinkNode *left, *right, *next;
 *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
 * };
 */
class Solution {
public:
    void connect(TreeLinkNode *root) {
        TreeLinkNode *now, *tail, *head;
        now = root;
        head = tail = NULL;
        while(now) {
            if (now->left)
                if (tail) tail = tail->next =now->left;
                else head = tail = now->left;
            if (now->right)
                if (tail) tail = tail->next =now->right;
                else head = tail = now->right;
            if(!(now = now->next)) {
                now = head;
                head = tail=NULL;
            }
        }
    }
};