题解 | #前序中序创建二叉树#

重建二叉树

http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6


/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
//int类型的变量代表左右子树范围,递归创建左右子树
class Solution {
public:
    TreeNode* DFS(int pl,int pr,int vl,int vr,vector<int> pre,vector<int> vin)
    {
        if(pl>pr||vl>vr)
            return NULL;
        int node=pre[pl];
        TreeNode* root=new TreeNode(node);
        int pos=vl;
        while(vin[pos]!=node)
            pos+=1;
        int ltree=pos-vl;
        int rtree=vr-pos;
        root->left=DFS(pl+1,pl+ltree,vl,pos-1,pre,vin);
        root->right=DFS(pl+ltree+1,pr,pos+1,vr,pre,vin);
        return root;
    }
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        int pre_l=pre.size();
        int vin_l=vin.size();
        return DFS(0,pre_l-1,0,vin_l-1,pre,vin);
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务