代码参照了严蔚敏、吴伟民编写的数据结构(C语言版)。
部分内容参考了这位大佬:
https://www.cnblogs.com/cpoint/p/3479788.html
所有代码采用C语言编写。讲解请查看注释。
头文件及宏定义
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
//#include"链队列.h"//层次遍历时用到
#define OK 1
#define Fail 0
#define False 0
#define True 1
#define Error 0;
typedef定义数据类型和结构体
typedef char TElemType;//二叉树结点的值是字符
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
InitBiTree
Status InitBiTree(BiTree *T){
//创建空二叉树
*T=NULL;
return OK;
}
DestoryBiTree
Status DestoryBiTree(BiTree *T){
//销毁二叉树
if((*T)->lchild)
DestoryBiTree(&(*T)->lchild);
if((*T)->rchild)
DestoryBiTree(&(*T)->rchild);
free(*T);
*T=NULL;
return OK;
}
CreateBiTree
/*
按照先序顺序输入元素创建二叉树,该创建过程与先序遍历相似
这里有两种写法,写法1:
*/
Status CreateBiTree(BiTree* T){
//根据输入数据来创建二叉树
/*
这样写的时候为什么不能用BiTNode* T呢?
因为传入的参数*T是指针,而函数内得所有操作都是对指针进行的,属于对形参进行无效操作。
正确的做法是使用BiTree* T,相当于BiTNode** T,通过 指针的指针 对 指针 进行操作。
*/
char ch;
scanf("%c",&ch);
if(ch==' '){
*T=NULL;
}
else{
*T=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(