LeetCode-Populating Next Right Pointers in Each Node-填充结点的右指针-二叉树递归

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

构造一个按深度索引的数组,存储的当前遍历的结点在这一层的最右边的结点。

由前序遍历的特点可知同一层左边的儿子先被访问,过一段时间后会访问右边的儿子。利用这个特点连接next数组即可。

需要注意vec.size()-1在vec=0时不是-1,而是一个很大的整数(溢出了)。

/**
 * 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) {}
 * };
 */
 typedef TreeLinkNode scnode;
class Solution {
public:
    vector<scnode *> ps;
    void PreOrder(scnode *rt,int l){
        if (rt==NULL) return;
        if (l+1>ps.size()){
            ps.push_back(NULL);
        }
        if (ps[l]!=NULL) ps[l]->next=rt;
        ps[l]=rt;
        rt->next=NULL;
        PreOrder(rt->left,l+1);
        PreOrder(rt->right,l+1);
    }
    void connect(TreeLinkNode *root) {
        PreOrder(root,0);
    }
};

 

posted @ 2014-10-14 20:28  zombies  阅读(100)  评论(0编辑  收藏  举报