已知二叉树的前序和后序遍历,怎么求中序遍历啊?

也就是求可以确定多少种树,高手指点一下啊,C或者C++代码也行啊!... 也就是求可以确定多少种树,高手指点一下啊,C或者C++代码也行啊! 展开
 我来答
方鸿晖09
2010-12-03 · TA获得超过1008个赞
知道小有建树答主
回答量:225
采纳率:66%
帮助的人:112万
展开全部
按照自己的思路写的,仅供参考,
int creat(BiTree &T, ElemType pre[],ElemType post[],int low_x,int high_x,int low_h,int high_h)
{//根据先序序列和后序序列建立二叉链表,先序序列和后序序列存于一维数组中,四个整型变量表示数组的范围,0号单元留空,函数返回可建立二叉树的数目
count=1;
if(low_x>high_x || low_h >high_h) {T==NULL;return count;}
if(low_x high_h])
{
T=new BiNode;
T->data=pre.elem[low_x];
}
if(low_x+1<=high_x || high_h-1 >= low_h)
{
if(pre [low_x+1] ! = post [high_h-1])
{
顺序查找pre [low_x+1]在后序序列的位置a;
顺序查找post [high_h-1]在先序序列的位置b;
creat(T->lchild,pre,post,low_x+1,b-1,low_h,a);
creat(T->rchild,pre,post,b,high_x,a+1,high_h-1);
}
else if(pre [low_x+1] = = post [high_h-1])
{
count*=2;
请选择建立左子树或右子树,左输入0,右输入1,用L_R表示
cin>>L_R;
if(L_R= =0)
{
creat(T->lchild,pre,post,low_x+1,high_x,low_h,high_h-1);
creat(T->rchild,pre,post,1,0,1,0);
else {
creat(T->lchild,pre,post,1,0,1,0);
creat(T->rchild,pre,post,low_x+1,high_x,low_h,high_h-1);
}
}
if (low_x+1> high_x || high_h-1 < low_h)
{
creat(T->lchild,pre,post,1,0,1,0);
creat(T->rchild,pre,post, 1,0,1,0);
}
}
gfgemw
2010-12-03 · TA获得超过846个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:324万
展开全部
TLR的第一个和LRT的最后一个一定是树根
TLR的第二个不是左子树的根就是右子树的根
如果TLR第二个与LRT的倒数第二个相同
则他是根的右子树
否则是根的左子树
将上面的方法递归
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
佳之星勇
2010-12-05 · TA获得超过128个赞
知道答主
回答量:114
采纳率:0%
帮助的人:0
展开全部
#include<iostream>
using namespace std;

typedef struct BinaryTree
{
char data;
struct BinaryTree *lchild,*rchild;
}BinaryTree,*BiTree;

void CreateBiTree(BiTree &T)
{
char z;
if((z=getchar())==' ')
T=NULL;
else
{
T=(BinaryTree*)malloc(sizeof(BinaryTree));
T->data=z;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
//先序遍历
void preBiTree(BiTree T)
{
if(T!=NULL)
{
cout<<T->data;
preBiTree(T->lchild);
preBiTree(T->rchild);
}
}
//中序遍历
void InBiTree(BiTree T)
{
if(T!=NULL)
{
InBiTree(T->lchild);
cout<<T->data;
InBiTree(T->rchild);
}
}
//后序遍历
void PostBiTree(BiTree T)
{
if(T!=NULL)
{
PostBiTree(T->lchild);
PostBiTree(T->rchild);
cout<<T->data;
}
}
int Depth(BiTree T)
{
if(T==NULL)
{
return 0;
}
else
return 1+(Depth(T->lchild)>Depth(T->rchild)? Depth(T->lchild):Depth(T->rchild));
}

void main()
{
BiTree T;
cout<<"请输入相应二叉树:"<<endl;
CreateBiTree(T);
cout<<"二叉树的先序遍历为:"<<endl;
preBiTree(T);
cout<<endl;
cout<<"二叉树的中序遍历为:"<<endl;
InBiTree(T);
cout<<endl;
cout<<"二叉树的后序遍历为:"<<endl;
PostBiTree(T);
cout<<endl;
cout<<"二叉树的深度为:"<<endl;
cout<<Depth(T)<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
绪倚丛诗蕊
2020-03-14 · TA获得超过3735个赞
知道大有可为答主
回答量:3078
采纳率:30%
帮助的人:212万
展开全部
前序遍历的简称为VLR(根结点-左子树-右子树),序为LVR,可以看到最后一个相同,于是我们同位相同的为R(右子树)其它位按组合逻辑取反。我一般用自创撇捺形象图,就是画出撇捺的走势,比如一前序为ABCDEF,中序为CBEDFA,后序就为CEFDBA。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友710959f30e
2010-12-03
知道答主
回答量:21
采纳率:0%
帮助的人:16.3万
展开全部
知道前序后序 只能判断出祖先 不能确定树的结构
应该也就不能确定中序吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式