数据结构C语言描述中关于二叉树
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构C语言描述中关于二叉树相关的知识,希望对你有一定的参考价值。
参考技术A 首先解答你为什么写if(t==null)
return;
会出错。
因为
#define
是
预处理命令
,实行字符串替代,不跟从
C
语言的语法,之后不用加分号。
#define
null
0;
的效果就是
if(t==0;)
return;
当然会报错。
其他几个地方刚好多个分号没有大碍,所以不报错。
你的程序最大的问题是
creatTree
虽然用
bitnode
*
型的参数,但是赋值时不用间接访问,是无法改变主调函数中任何变量的值的,也就是说,所有
bt=null;
的操作都是无效的,只是改变了
形参
的值。最简单的解决方法,是取消
initiatebitree,而把整个方法应用到
creatTree
来,如以下程序:
#include
<stdio.h>
#include
<malloc.h>
#define
OVERFLOW
0
#define
null
0
#define
OK
1
#define
ERROR
0
typedef
struct
bitree
char
data;
struct
bitree
*lchild,
*rchild;
bitnode;
int
creatTree(bitnode
**bt)
char
ch;
scanf("%c",
&ch);
if
(ch=='#')
*bt=null;
else
if
(!(*bt=(bitnode
*)malloc(sizeof(bitnode))))
return
ERROR;
(*bt)->data=ch;
creatTree(&(*bt)->lchild);
creatTree(&(*bt)->rchild);
return
OK;
void
inordertraverse(bitnode
*t)
if(t==0)
return;
if(t->lchild!=0)
inordertraverse(t->lchild);
printf("%c\n",t->data);
if(t->rchild!=0)
inordertraverse(t->rchild);
void
main()
bitnode
*bbb
=
null;
printf("Input
tree\n");
creatTree(&bbb);
printf("Output
tree\n");
inordertraverse(bbb);
假如输入为
abd##e#c#f##,代表的树就是:
a
/ \
b
d
/
\
\
d
e
f
输出结果为中根序遍历:
d
b
e
a
c
f
以上是关于数据结构C语言描述中关于二叉树的主要内容,如果未能解决你的问题,请参考以下文章