社区
C语言
帖子详情
请教一道考研数据结构题
hxtx
2003-10-21 09:49:44
已知二叉树的中序和后序遍历序列存放在数组in[]和post[]中,试编一个算法创建这棵二叉树。
...全文
41
12
打赏
收藏
请教一道考研数据结构题
已知二叉树的中序和后序遍历序列存放在数组in[]和post[]中,试编一个算法创建这棵二叉树。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fztx
2003-10-28
打赏
举报
回复
我写出了!
#include "iostream.h"
#include "malloc.h"
#include "string.h"
typedef struct node{
char data;
struct node *lc,*rc;
}btree;
btree *build_btree2(char *ppos,char *ipos,int n)
{
btree *ptr;
char *rpos;
int k;
if(n<=0)return NULL;
ptr=(btree *)malloc(sizeof(btree));
ptr->data=*ppos;
ptr->lc=ptr->rc=NULL;
for(rpos=ipos;rpos<ipos+n;rpos++)
if(*rpos==*ppos)break;
k=rpos-ipos;
ptr->lc=build_btree2(ppos+n-k,ipos,k);
ptr->rc=build_btree2(ppos+1,rpos+1,n-k-1);
return ptr;
}
void daozuan(char a[],int n)
{
int i=0,j=n-1,char t;
while(i<=j){
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
void post(btree *root)
{
if(root){
post(root->lc);
cout<<root->data<<" ";
post(root->rc);
}
}
void main()
{
btree *root;
char a[]="cbeda";
char b[]="bcaed";
daozuan(a,strlen(a));
root=build_btree2(a,b,strlen(a));
post(root);
cout<<endl;
}
bobob
2003-10-28
打赏
举报
回复
对基本功要求很强,不过很容易理解啊
由中序得到根结点,把数组post分成左右子树
递归
jakeye
2003-10-28
打赏
举报
回复
懒的想,但只要了解中序和后序的遍历方法,就不难写出来,但要注意数组的下标.
eliza007
2003-10-22
打赏
举报
回复
从中序知道根节点,从后序知道左右子树
panzhaoping
2003-10-21
打赏
举报
回复
数据结构真好。
ZhangYv
2003-10-21
打赏
举报
回复
由先中序列恢复一棵确定的二叉树,并对其做后序遍历的输出,要点是如何控制传递数组的下标的值.
中后序还原也一样,树是可以根据此唯一递归定义的:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
typedef struct node
{
char info;
struct node *llink,*rlink;
}TNODE;
char pred[MAX],inod[MAX];
TNODE *restore(char *,char *,int);
void postorder(TNODE *);
main(int argc,char * *argv)
{
TNODE *root;
if(argc<3)
exit(0);
strcpy(pred,argv[1]);
strcpy(inod,argv[2]);
root=restore(pred,inod,strlen(pred));
postorder(roor);
printf("\n\n");
}
TNODE *restore(char *ppos,char *ipos,int n)
{
TNODE *ptr;
char *rpos;
int k;
if(n<=0)
return NULL;
ptr=(TNODE*)malloc(sizeof(TNODE));
ptr->info=*ppos;
for(rpos=inpos;rpos<ipos+n;rpos++)
if(*rpos==*ppos)
break;
k=rpos-ipos;
ptr->llink=restore(ppos+1,ipos,k);
ptr->rlink=restore(ppos+1+k,rpos+1,n-1-k);
return ptr;
}
void postorder(TNODE *ptr)
{
if(ptr==NULL)return;
postorder(ptr->llink);
postorder(ptr->rlink);
printf("%c",ptr->info);
}
langzi8818
2003-10-21
打赏
举报
回复
先把这个二叉树画出来,在创建就好的多了
aflyinghorse
2003-10-21
打赏
举报
回复
李春保的 数据结构习题与解析中以有这题的解答
rocllllll
2003-10-21
打赏
举报
回复
快了,我正复习到这,估计过几天就可以了
不过,兄弟,还是要自己来的,总是问别人是不行的
我现在包括C和数据结构一起复习,感觉已经上路了
目前正在前进中...
tibetan
2003-10-21
打赏
举报
回复
基本思路是用低归。
从中序中知道左子树,从后续中就可以知道左字书对应的右子树。就这样。
loveisbug
2003-10-21
打赏
举报
回复
教材里有思路的吧。
hxtx
2003-10-21
打赏
举报
回复
上面朋友写的是由先序和中序建立。
由先序和中序建立我也会(李春葆书上写的)
关键是由中序和后序如何建立?
数据结构
+算法面试100
题
他们决定这么分: 抽签决定自己的号码(1、2、3、...那就, 连续来几组微软公司的面试
题
,让你一次爽个够: ====================== 97.第1组微软较简单的算法面试
题
1.编写反转字符串的程序,要求优化速度、优化空间。
数据结构
面试100
题
一年之前的10月14日,一个名叫July (头像为手冢国光)的人在一个叫csdn的论坛上开帖分享微软等公司
数据结构
+算法面试100
题
,自此,与上千网友一起做,一起思考,一起解答这些面试
题
目,最终...
珍藏版、微软等
数据结构
+算法面试100
题
全部出炉
火爆出炉:微软等
数据结构
+算法面试100
题
首次完整亮相 ---100
题
V0.1版最终完成 ================ 作者:July2010年12月6日 微软等100
题
系列V0.1版终于结束了。 从2010年10月11日当天最初发表前40
题
以来,...
数据结构
+算法面试100
题
~~~摘自CSDN
数据结构
+算法面试100
题
~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树)
题
目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 ...
微软公司等
数据结构
+算法面试100
题
(第1-100
题
)全部出炉
微软等公司
数据结构
+算法面试100
题
(第1-100
题
)首次完整亮相 作者:July、2010年12月6日。更新:现今,这100
题
的答案已经全部整理出来了,微软面试100
题
2010年版全部答案集锦:...
C语言
69,337
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章