106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树 。

class Solution {
public:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if (postorder.size() == 0) return NULL;
        TreeNode* root = new TreeNode(postorder.back());
        if (postorder.size() == 1) return root;
        auto it = find(inorder.begin(),inorder.end(),root->val);
        vector<int> left_inorder(inorder.begin(),it);
        vector<int> right_inorder(it+1,inorder.end());
        int dis = distance(inorder.begin(),it);
        it = postorder.begin() + dis;
        vector<int> left_postorder(postorder.begin(),it);
        vector<int> right_postorder(it,postorder.end()-1);
        if(left_inorder.size())
        {
            root->left = buildTree(left_inorder,left_postorder);
        }
        if(right_inorder.size())
        {
            root->right = buildTree(right_inorder,right_postorder);
        }
        return root;
    }
};

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if (preorder.size() == 0) return NULL;
        TreeNode* root = new TreeNode(preorder.front());
        if (preorder.size() == 1) return root;
        auto it = find(inorder.begin(),inorder.end(),root->val);
        vector<int> left_inorder(inorder.begin(),it);
        vector<int> right_inorder(it+1,inorder.end());
        int dis = distance(inorder.begin(),it);
        it = preorder.begin() + 1 + dis;
        vector<int> left_preorder(preorder.begin()+1,it);
        vector<int> right_preorder(it,preorder.end());
        if(left_inorder.size())
        {
            root->left = buildTree(left_preorder,left_inorder);
        }
        if(right_inorder.size())
        {
            root->right = buildTree(right_preorder,right_inorder);
        }
        return root;
    }
};
posted @   xiazichengxi  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩