题解 | #重建二叉树#

重建二叉树

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

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        int n = pre.size();
        int m = vin.size();
        //每个遍历都不能为0 fast-template
        if(n == 0 || m == 0)
            return NULL;
        //构建根节点
        TreeNode *root = new TreeNode(pre[0]);
	    if (m == n && m == 1) return root; 
	    // loop funtion
        for(int i = 0; i < vin.size(); i++){
             //找到中序遍历中的前序第一个元素
            if(pre[0] == vin[i]){
                //左子树的前序遍历
                vector<int> leftpre(pre.begin() + 1, pre.begin() + i + 1);
                //左子树的中序遍历
                vector<int> leftvin(vin.begin(), vin.begin() + i);
                 //构建左子树
                root->left = reConstructBinaryTree(leftpre, leftvin);
                //右子树的前序遍历
                vector<int> rightpre(pre.begin() + i + 1, pre.end());
                //右子树的中序遍历
                vector<int> rightvin(vin.begin() + i + 1, vin.end());
                 //构建右子树
                root->right = reConstructBinaryTree(rightpre, rightvin);
                break;
            }
        }
        return root;
    }
};

该题的关键点是要知道递归的参数是哪些;

vector 给dev 提供了一个很好的copy模板

note_coding 文章被收录于专栏

记录自己的解题思路, 欢迎评价

全部评论

相关推荐

RajahnRan:公司赚到了,这可是一眼就手写出来的代码,ai都写不出来
点赞 评论 收藏
分享
迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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