二叉树,由先序序列和中序序列建树 / 满(真)二叉树由先序序列和后序序列建树

根据先序和中序序列可以唯一确定一棵二叉树。建树过程类似于斐波那契数列求项,先建立根节点,再递归构建左右子树。对于满二叉树,先序和后序序列也可用于重建,通过找到特定节点在后序序列的位置来划分左右子树。

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

中序序列可以与先序,后序,层序序列中的任何一个建立一棵树,而后三者之间两两不能建树(因为无法区分根节点的左右子树)
在这里插入图片描述

在这里插入图片描述
按先序遍历的顺序来建立树,建树过程类似于斐波那契数列的求项过程

先建立第一层的根节点,接着就按步骤的顺序来建立节点,如下图
在这里插入图片描述
上代码

#include <iostream>

using namespace std;

struct node
{
   
    int x;
    node* lson;
    node* rson;
};

int pre[1000],in[1000];

///二叉树的先序区间(prel,prer),中序区间(inl ,inr)
///通过先序区间找出根节点,可将中序区间分为左右子树,然后将左右子树看成单独的树
node* recreat(int prel,int prer,int inl, int inr)
{
   
    if(prel>prer) return NULL;///若先序区间长度<=0,则返回空,即没有子树
    node *root=new node;///建立根节点,并为其开辟空间
    root->x=pre[prel];///给根节点赋值
    int k;
    for(k=inl;k<inr;k++)///中序区间中找出根节点,这样就可以将先序序列分为左右子树
    {
   
        if(in[k]==pre[prel])///pre[prel]是根节点的值,为了将中序序列分为左右子树
            break;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值