恢复二叉树问题

jxvinus 2002-05-24 12:18:15
将一个字符串恢复成一个二叉树如:
ABD0000E00G0000FH0000J0000\0,
字符是按先序排列,其中字母后有两个零表示无左子树,4个零表示无左右子树。
无零表示有左右子树。(如有需要可将一个零表示无右子树)
构造出的树如下图:
A
/ \
B F
/\ / \
D E H J
\
C
谢谢大家!!
...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylove0618 2002-05-24
  • 打赏
  • 举报
回复
一些提示,如果目前获得字符非0,构造节点入栈,如果后继非0,前节点出栈,构造左子树;如果后继为0,继续直至非0为止。中间记录0的个数,如果2个,结点出栈,左子树设为空,构造右子树;如果为4个,前节点出栈,左右子树为空。
jlqidan 2002-05-24
  • 打赏
  • 举报
回复
我的这段程序编译运行没问题
我是用一个空格表示没左子树,两个空格表示没左右子树.
你自己改改就行了

#include "stdio.h"
#include <stdlib.h>
typedef struct binode{
char ch;
struct binode *lnode,*rnode;
}binode,*bitree;
void create(bitree &T);
void midpri(bitree &T);
void main(){
bitree T;
T=(bitree)malloc(sizeof(binode));
create(T);
printf("%s","ok");
midpri(T);
}

void create(bitree &T){
//先序建立二叉树;
char ch;

ch=getchar();
if (ch==' ')
T=NULL;
else{
if(!(T=(binode *)malloc(sizeof(binode)))) exit(0);
//if(!T)T=(binode *)malloc(sizeof(binode));
T->ch=ch;
create(T->lnode);
create(T->rnode);
}
}
void midpri(bitree &T){
//中序遍历二叉树;
if(T->lnode)
midpri(T->lnode);
printf("%c",T->ch);
if(T->rnode)
midpri(T->rnode);
}
mylove0618 2002-05-24
  • 打赏
  • 举报
回复
首先一个问题,你的图有误。E的右子树应该为G.
至于如何实现,简单的栈处理我想就可以了。
lizhongkun 2002-05-24
  • 打赏
  • 举报
回复
严魏敏的书上有 书名字忘了
根据 字浮窜先序构造2叉数

69,371

社区成员

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

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