社区
C语言
帖子详情
请教一道考研数据结构题
hxtx
2003-10-21 09:49:44
已知二叉树的中序和后序遍历序列存放在数组in[]和post[]中,试编一个算法创建这棵二叉树。
...全文
43
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、4、5) 首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时, 按照他的方案进行分配,否则将被扔进大海喂鲨鱼 如果1号死后,再由2号提出分配方案,然后剩下的4人进行表决, 当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼。那就, 连续来几组微软公司的面试
题
,让你一次爽个够: ====================== 97.第1组微软较简单的算法面试
题
1.编写反转字符串的程序,要求优化速度、优化空间。
微软等
数据结构
+算法面试100
题
全部答案集锦
微软等
数据结构
+算法面试100
题
全部答案集锦 作者:July、阿财。 时间:二零一一年十月十三日。 引言 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试全部100
题
答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July (头像为手冢国光)
数据结构
面试100
题
引言 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试全部100
题
答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July (头像为手冢国光)的人在一个叫csdn的论坛上开帖分享微软等公司
数据结构
+算法面试100
题
,自此,与上千网友一起做,一起思考,一起解答这些面试
题
目,最终...
微软公司等
数据结构
+算法面试100
题
(第1-100
题
)全部出炉
微软等公司
数据结构
+算法面试100
题
(第1-100
题
)首次完整亮相 作者:July、2010年12月6日。更新:现今,这100
题
的答案已经全部整理出来了,微软面试100
题
2010年版全部答案集锦:http://blog.csdn.net/v_july_v/article/details/6870251。关于此100道面试
题
的所有一切详情,包括答案,资源
珍藏版、微软等
数据结构
+算法面试100
题
全部出炉
火爆出炉:微软等
数据结构
+算法面试100
题
首次完整亮相 ---100
题
V0.1版最终完成 ================ 作者:July2010年12月6日 微软等100
题
系列V0.1版终于结束了。 从2010年10月11日当天最初发表前40
题
以来,直至此刻,整理这100
题
,已有近2个月。 2个月,因为要整理这100
题
,很多很多其它的事都被我...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章