前言:
本篇文章仅给出关于二叉树的部分代码,若想深入了解二叉树请查看我的其他文章
因为本次实验二叉树考察的内容太多了,所以我把它拆分成了三个部分,分别是建立,处理,遍历三个板块,三篇文章可以在我的博客或专栏中找到。
以下是链接
二叉树递归总头文件:
建立包含以下内容:
二叉树结构,二叉树的三种建立。
遍历包含以下内容:
按层次非递归遍历、先序非递归、先中后序递归遍历二叉树的链表结构
处理包含以下内容:
求二叉树的高度、叶节点数、单分支节点数、双分支节点数,交换左右子树
目录
二叉树特殊处理:
求二叉树的深度:
int TreeDepth(BiTree T) {
//求高度
if(!T) {
return 0;
} else {
int r, l;
r = TreeDepth(T->rchild);
l = TreeDepth(T->lchild);
if(r > l) {
l = r;
}
return l + 1;
}
}
叶节点数:
int LeafNumber(BiTree T) {
//求叶节点数
if(!T->lchild && !T->rchild) {
return 1;
} else {
int r = 0, l = 0;
if(T->rchild) {
r = LeafNumber(T->rchild);
}
if(T->lchild) {
l = LeafNumber(T->lchild);
}
return r + l;
}
return OK;
}
单分支节点数:
int SingleBranchNodes_Number(BiTree T) {
//求单分支节点数目
if(!T->lchild && !T->rchild) {
return 0;
} else {
int r = 0, l = 0;
if(T->rchild) {
r = SingleBranchNodes_Number(T->rchild);
}
if(T->lchild) {
l = SingleBranchNodes_Number(T->lchild);
}
if(!T->rchild || !T->lchild) {
return r + l + 1;
}
return r + l;
}
}
双分支节点数:
int DualBranchNodes_Number(BiTree T) {
//求双分支节点数目
if(!T->lchild && !T->rchild) {
return 0;
} else {
int r = 0, l = 0;
if(T->rchild) {
r = DualBranchNodes_Number(T->rchild);
}
if(T->lchild) {
l = DualBranchNodes_Number(T->lchild);
}
if(T->rchild && T->lchild) {
return r + l + 1;
}
return r + l;
}
}
交换左右子树:
Status Swap_BiTree(BiTree *T) {
//交换二叉树左右子树
if(!*T) {
return OK;
} else {
BiTree p = (*T)->lchild;
(*T)->lchild = (*T)->rchild;
(*T)->rchild = p;
Swap_BiTree(&(*T)->rchild);
Swap_BiTree(&(*T)->lchild);
return OK;
}
}