qingcheng奕  

https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/

二叉树遍历的变种:树的节点多了个next指针。

首先想到肯定和树的遍历有关:先根、中根、后根都不可以。。。

观察找规律,如果当前节点是它根的 left,则它的next就是它根的 right。

如果当前节点是它根的right,则它的next 就是 它根的next的left,如果它根的 next 存在的话。

/**
 * 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;
        root->next = NULL;
        
        visit(root);
    }
    void visit(TreeLinkNode *root)
    {
        if(root->left)
        {
            root->left->next = root->right;
            root->right->next = (root->next ? root->next->left:NULL);
            visit(root->left);
            visit(root->right);
        }
    }
};

 

posted on 2014-07-26 21:17  qingcheng奕  阅读(110)  评论(0编辑  收藏  举报