题解 | #重建二叉树#

重建二叉树

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

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        if(pre.size()==0 || vin.size()==0)    return nullptr;

        // 找到根节点的值,并构建根节点
        int rootval = pre[0];
        TreeNode* root = new TreeNode(rootval);

        // 找到根节点在中序数组中的位置,可以标志左右子树的节点各有多少个
        int index=0;
        for(; index<vin.size(); index++) {
            if(vin[index] == rootval) {
                break;
            }
        }
        // 切割数组 vin
        vector<int> vinleft(vin.begin(), vin.begin()+index);
        vector<int> vinright(vin.begin()+index+1, vin.end());
        // 切割数组 pre
        vector<int> preleft(pre.begin()+1, pre.begin()+1+index);
        vector<int> preright(pre.begin()+1+index, pre.end());

        // 递归生成左右子树
        root->left = reConstructBinaryTree(preleft, vinleft);
        root->right = reConstructBinaryTree(preright, vinright);

        // 返回根节点
        return root;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务