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


按先序遍历的顺序来建立树,建树过程类似于斐波那契数列的求项过程
先建立第一层的根节点,接着就按步骤的顺序来建立节点,如下图

上代码
#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;
}

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

被折叠的 条评论
为什么被折叠?



