重建二叉树

4 篇文章 0 订阅

输入一棵二叉树的前序遍历序列和中序遍历序列,重建二叉树,返回二叉树的根结点。

采用递归的思想,前序遍历的第一个节点是二叉树的根节点,在中序遍历中找到根节点左边的是左子树,右边的是右子树。

struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
    int len=pre.size();
    if(len==0)
        return NULL;
    int index;
    int a;
    vector<int>prel;
    vector<int>inl;
    vector<int>prer;
    vector<int>inr;
    TreeNode*head=new TreeNode(pre[0]);
    a=pre[0];
    for(int i=0;i<len;i++)
    {
        if(in[i]==a)
        {
            index=i;
            break;
        }
    }
    for(int j=1;j<index+1;j++)
    {
        prel.push_back(pre[j]);
        inl.push_back(in[j-1]);
    }
    for(int h=index+1;h<len;h++)
    {
        prer.push_back(pre[h]);
        inr.push_back(in[h]);
    }
    head->left=reConstructBinaryTree(prel,inl);
    head->right=reConstructBinaryTree(prer,inr);
    return head;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值