讲解前序中序建立二叉树

本文通过C++代码详细解析了如何根据前序遍历和中序遍历序列递归地构建二叉树,并强调理解递归思想的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector版:直接上c++代码,讲解在下面,一定要看哦!

struct node{
    node *l, *r;
    int val;
    node(int x) : val(x), l(NULL), r(NULL) {}
};
node* reBuild(vector<int> pre, vector<int> in){
    vector<int> lPre, rPre, lIn, rIn;
    int pos = 0;
    int len = in.size();
    if(len == 0)
        return NULL;
    node* cur = new node(pre[0]);
    for(int i = 0; i < len; i++){
        if(pre[0] == in[i]){
            pos = i;
            break;
        }
    }
    for(int i = 1; i < pos+1; i++){
        lPre.push_back(pre[i]);
        lIn.push_back(in[i-1]);
    }
    for(int i = pos+1; i < len; i++){
        rPre.push_back(pre[i]);
        rIn.push_back(in[i]);
    }
    cur->l = reBuild(lPre, lIn);
    cur->r = reBuild(rPre, rIn);
    return cur;
}

一定不要死记硬背,跟随我的思路来理解:
第一步,因为我们要建树,所以函数的范围值是一个节点指针。
第二步,因为模拟手动建树,需要的参数就是前序遍历和中序遍历的序列,所以参数是pre,in。
第三步,根据分治法原理,递归地去建立当前节点的左子树和右子树,此处就是递归的入口(两个)。
第四步,设定递归出口,当前序或者中序遍历的长度为0时,返回。

共勉:做题先想思路,后想实现方法,不可一起考虑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值