【LeetCode】105和106.重建二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bqw18744018044/article/details/82459505
  • 一、题目描述

  • 二、思路

  • 三、C++实现

        1.105题

class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0)return nullptr;
        if(preorder.size()!=inorder.size())return nullptr;
        return create(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
    }
    //ps和pe是前序遍历的起始和终止位置,is和ie则是中序遍历的起始和终止位置;
    TreeNode* create(vector<int>& preorder,vector<int>& inorder,int ps,int pe,int is,int ie){
        if(ps>pe)return nullptr;
        TreeNode* node = new TreeNode(preorder[ps]);
        int pos = 0;//记录根节点在中序遍历中的位置
        for(int i = is;is<=ie;i++){
            if(inorder[i]==node->val){
                pos = i;
                break;
            }
        }
        //pos-is表示在中序遍历中根节点左边(左子树)元素的个数;
        //ie-pos表示在中序遍历中根节点右边(右子树)元素的个数;
        node->left = create(preorder,inorder,ps+1,ps+pos-is,is,pos-1);
        node->right = create(preorder,inorder,pe-ie+pos+1,pe,pos+1,ie);
        return node;
    }
};

        2.106题

class Solution {
public:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if(inorder.size()==0)return nullptr;
        if(inorder.size()!=postorder.size())return nullptr;
        return create(inorder,postorder,0,inorder.size()-1,0,postorder.size()-1);
    }
    //ps和pe是前序遍历的起始和终止位置,is和ie则是中序遍历的起始和终止位置;
    TreeNode* create(vector<int>& inorder,vector<int>& postorder,int is,int ie,int ps,int pe){
        if(ps>pe)return nullptr;
        TreeNode* node = new TreeNode(postorder[pe]);
        int pos = 0;
        //记录根节点在中序遍历中的位置
        for(int i=is;i<=ie;i++){
            if(inorder[i]==node->val){
                pos = i;
                break;
            }
        }
        //pos-is表示在中序遍历中根节点左边(左子树)元素的个数;
        //ie-pos表示在中序遍历中根节点右边(右子树)元素的个数;
        node->right = create(inorder,postorder,pos+1,ie,pe-ie+pos,pe-1);
        node->left = create(inorder,postorder,is,pos-1,ps,pe-ie+pos-1);
        return node;
    }
};
  • 四、时间复杂度

猜你喜欢

转载自blog.csdn.net/bqw18744018044/article/details/82459505
今日推荐