前序中序构建二叉树 OFF7

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0){
            return NULL;
        }
        if(preorder.size()==1){
            TreeNode* root=new TreeNode(preorder[0]);
        }
        TreeNode* head=new TreeNode(preorder[0]);//先序序列第一个为根节点
        vector<int> newIn_left;
        vector<int> newIn_right;
        int f=0;
        /**
            在中序序列中,把根节点左边和右边的序列都拿出来
        */
        for(int i=0;i<preorder.size();i++){
            if(inorder[i]!=preorder[0]&&f==0){
                newIn_left.push_back(inorder[i]);
              //  cout<<"newInleft "<<inorder[i]<<endl;
            }
            if(f==1){
                //cout<<"newInright "<<inorder[i]<<endl;
                newIn_right.push_back(inorder[i]);
            }
            if(inorder[i]==preorder[0]){
                f=1;
            }
        }
        //cout<<newIn_left.size()<<endl;
        vector<int> newPre_left;
        vector<int> newPre_right;
         /**
            在前序序列中,把根节点左边和右边的序列都拿出来
        */
        for(int i=1;i<preorder.size();i++){
            if(i<1+newIn_left.size()){
                //cout<<"newPreleft "<<preorder[i]<<endl;
                newPre_left.push_back(preorder[i]);
            }else{
                //cout<<"newPreRihjt "<<preorder[i]<<endl;
                newPre_right.push_back(preorder[i]);
            }
            
        }
        head->left=buildTree(newPre_left,newIn_left);
        head->right=buildTree(newPre_right,newIn_right);
        return head;
        
    }
};
posted @   lwx_R  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-10-01 快速幂
2021-10-01 cmath和iomanip
点击右上角即可分享
微信分享提示