二叉树链式存储结构

由二叉树定义得知,二叉树的结点由一个元素和分别指向其左、右子树的两个分支构成,则表示二叉树的链表中的结点至少包含3个域,如下图。在这里插入图片描述

二叉树建立

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序是如何建立出二叉树的?(以下图为例)
在这里插入图片描述

从主函数开始执行:定义一个BiTNode类型的指针root,将指针root的地址赋给T(T是一个BiTNode类型指针的指针)
然后执行CreatBiTree:
输入a,输入的不是空格,给T指向的指针即root开辟一段空间。此时:
在这里插入图片描述
然后将ch赋给T指向的指针的data。
在这里插入图片描述
然后执行CreatBiTree(&((*T)->lchild));
注意进入这层函数后T的指向
在这里插入图片描述
输入b
b不为空格给T指向的lchild指针开辟一段空间,并把b赋给新空间的data
在这里插入图片描述
然后执行CreatBiTree(&((*T)->lchild));
输入空格,ch==空格执行*T = NULL;
在这里插入图片描述

执行 CreatBiTree(&((*T)->rchild));
输入空格,ch==空格执行*T = NULL;
在这里插入图片描述
返回上一层递归在这里插入图片描述
执行 CreatBiTree(&((*T)->rchild));
输入空格,*T = NULL;
在这里插入图片描述
到此二叉树建立完成

1.#define TElemType char表示用TElemType char替换char

2.BiTree是什么意思?
用BiTree代表BiTNode *
例如:typedef int *BIT 表示用BIT替换int *这个类型,那么BIT a代表定义一个int型指针a,BIT *b表示定义一个int型指针型的指针b。
3.getchar()的作用是什么?

getchar由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值。当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。

本例中二叉树为字符型所以需要在scanf("%c",&ch)后加一句getchar()否则第二次执行scanf时系统会把上一次缓存区滞留的回车当作本次输入的字符读入

4.*T = (BiTNode*)malloc(sizeof(BiTNode));是什么意思?
上述代码中T是一个BiTNode类型指针的指针,*T则表示T指向的那个指针,所以*T = (BiTNode*)malloc(sizeof(BiTNode));表示给T指向的那个指针在内存里开辟一段一定大小的空间。同理(*T).data = ch;表示把ch的值赋给T指向的那个指针的data域。

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值