前言:
本篇文章仅给出关于二叉树的部分代码,若想深入了解二叉树请查看我的其他文章
因为本次实验二叉树考察的内容太多了,所以我把它拆分成了三个部分,分别是建立,处理,遍历三个板块,三篇文章可以在我的博客或专栏中找到。
以下是链接
二叉树递归总头文件:
建立包含以下内容:
二叉树结构,二叉树的三种建立。
遍历包含以下内容:
按层次非递归遍历、先序非递归、先中后序递归遍历二叉树的链表结构
处理包含以下内容:
求二叉树的高度、叶节点数、单分支节点数、双分支节点数,交换左右子树
目录
二叉树的基本结构:
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
二叉树的建立:
建立空二叉树:
Status InitBiTree(BiTree *T) {
//构造空二叉树
*T = NULL;
return OK;
}
先序序列建立二叉树:
Status CreateBiTree_Pre(BiTree *T) {
//先序构造二叉树
TElemType ch;
scanf(" %c", &ch);
if(ch == '#') {
*T = NULL;
} else {
if(!(*T = (BiTNode *)malloc(sizeof( BiTNode )))) {
exit(OVERFLOW);
}
(*T)->data = ch;
CreateBiTree_Pre(&(*T)->lchild);
CreateBiTree_Pre(&(*T)->rchild);
}
return OK;
}
中序序列建立二叉树:
Status CreateBiTree_In(BiTree *T) {
//中序构造二叉树
TElemType ch;
scanf(" %c", &ch);
if(ch == '#') {
*T = NULL;
} else {
if(!(*T = (BiTNode *)malloc(sizeof( BiTNode )))) {
exit(OVERFLOW);
}
CreateBiTree_In(&(*T)->lchild);
(*T)->data = ch;
CreateBiTree_In(&(*T)->rchild);
}
return OK;
}
后序序列建立二叉树:
Status CreateBiTree_Post(BiTree *T) {
//后序构造二叉树
TElemType ch;
scanf(" %c", &ch);
if(ch == '#') {
*T = NULL;
} else {
if(!(*T = (BiTNode *)malloc(sizeof( BiTNode )))) {
exit(OVERFLOW);
}
CreateBiTree_Post(&(*T)->lchild);
CreateBiTree_Post(&(*T)->rchild);
(*T)->data = ch;
}
return OK;
}