二叉树链式存储结构

由二叉树定义得知,二叉树的结点由一个元素和分别指向其左、右子树的两个分支构成,则表示二叉树的链表中的结点至少包含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域。

    原文作者:满二叉树
    原文地址: https://blog.csdn.net/qq_35987486/article/details/83791963
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞