s4553711
5/1/2017 - 6:55 AM

116.cpp

/**
 * 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 == NULL) return;
        TreeLinkNode* parent = root;
        connect(parent->left, root);
        connect(parent->right, root);
    }
    
    void connect(TreeLinkNode *cur, TreeLinkNode *parent) {
        if (cur == NULL) return;
        if (parent->left == cur) {
            cur->next = parent->right;
        } else {
            if (parent->next != NULL) {
                cur->next = parent->next->left;
            }
        }
        connect(cur->left, cur);
        connect(cur->right, cur);
    }
};