数据结构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语言描述中关于二叉树的主要内容,如果未能解决你的问题,请参考以下文章

二叉图(高级数据结构)

数据结构与算法分析 —— C 语言描述:二叉树

数据结构C语言二叉树

采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为啥是先序呢?

C语言数据结构树和二叉树的问题

请问C语言如何创建二叉树????