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