给出中序和后序遍历,构造二叉树以及给出前序和中序构造二叉树

217 篇文章 0 订阅

递归构造

中序和后序构造

  TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
        int lenIn=inorder.size();
        int lenPost=postorder.size();
        if(lenIn==0 || lenPost==0)
            return NULL;
        return buildTreeCore(inorder,0,lenIn-1,postorder,0,lenPost-1);
    }
    TreeNode* buildTreeCore(vector<int>& inorder,int startIn,int endIn,vector<int>& postorder,int startPost,int endPost){
        if(startIn>endIn||startPost>endPost)
            return NULL;
       int i=startIn;
        for(;i<=endIn;i++){
            if(inorder[i]==postorder[endPost])
                break;
        }
        TreeNode* root=new TreeNode(postorder[endPost]);
        root->left=buildTreeCore(inorder,startIn,i-1,postorder,startPost,startPost+i-startIn-1);
        root->right=buildTreeCore(inorder,i+1,endIn,postorder,startPost+i-startIn,endPost-1);
        return root;
    }

中序和前序构造二叉树

    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        int lenpre=preorder.size();
        int lenin=inorder.size();
        if(lenpre==0||lenin==0)
            return NULL;
        return buildTreeCore(preorder,0,lenpre-1,inorder,0,lenin-1);
    }
    TreeNode* buildTreeCore(vector<int>& preorder,int startPre,int endPre,vector<int>& inorder,int startIn,int endIn){
        if(startPre>endPre || startIn> endIn)
            return NULL;
        int i=startIn;
        for(;i<=endIn;i++){
            if(inorder[i]==preorder[startPre])
                break;
        }
        TreeNode* root=new TreeNode(preorder[startPre]);
        root->left=buildTreeCore(preorder,startPre+1,startPre+i-startIn,inorder,startIn,i-1);
        root->right=buildTreeCore(preorder,startPre+i-startIn+1,endPre,inorder,i+1,endIn);
        return root;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值