请教一道考研数据结构题

hxtx 2003-10-21 09:49:44
已知二叉树的中序和后序遍历序列存放在数组in[]和post[]中,试编一个算法创建这棵二叉树。
...全文
42 12 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
上面朋友写的是由先序和中序建立。
由先序和中序建立我也会(李春葆书上写的)
关键是由中序和后序如何建立?
主讲老师hwdong具有几十年211某大学的数据结构课程教材经验,是该校第一批精品课程的数据结构课程的主持人。hwdong在课程教学上不同于一般的讲师,擅长深入浅出、化难为易,使难懂的概念、原理或算法变得简单易懂。在生活节奏如此快的紧张生活中,故意废话啰嗦忽悠浪费别人时间、谋财害命,hwdong的教学风格就是全程干货无废话、在尽可能短的时间里输出最可能多的干活,在youtube(频道hwdong)、B站(hw-dong)的课程深受广大网友的喜欢和好评,大家可以去观看评论。《数据结构》是计算机学科的主干基础课,主要介绍基本的数据结构、典型算法及其应用。该课程是计算机专业最重要的承前启后的核心课程,它既提供编写规范的程序的理论基础和实践指导,又是进一步学习其他如操作系统、编译原理、软件工程、人工智能、计算机网络等软硬件课程的基础,是开发各种软件、研究算法的最核心基础。熟悉数据结构是合格程序员的基本内功,从硅谷的google、facebook等到国内的BAT企业招聘软件算法人员的面试几乎都是数据结构与算法。本课程包括:线性表、栈和队列、字符串、多维数组、树和二叉树、图、查找、优先队列和堆、排序等,还将包括面向考研和求职面试的数据结构。课程特点:化难为易,使复杂难懂的问变得简单易懂。用动画演示执代码过程,避免空洞的讲解,原理和代码实现结合,避免大多数教学只讲原理不知实现的通病。内容丰富,无废话和抖机灵,直指核心。课程内容将长期更新,力求精益求精。  

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧