//二叉树操作
//BinTree.h
//定义链式结构
#include<stdio.h>
#include<stdlib.h>
#define QUEUE_MAXSIZE
typedef char DATA; //定义元素类型
typedef struct ChainTree
{
DATA data; //元素数据
struct ChainTree *left; //左子树结点指针
struct ChainTree *right; //右子树结点指针
}ChainBinTree;
//初始化二叉树
ChainBinTree *BinTreeInit(ChainBinTree *node) //初始化二叉树根节点
{
if(node!=NULL) //若二叉树根节点不为空
return node;
else
return NULL;
}
//添加数据到二叉树,首先使用BinTreeInit()函数创建二叉树根节点,然后使用BinTreeAddNode()添加结点到二叉树
//添加数据到二叉树,bt为父结点,node为子结点,n=表示添加左子树,n=2表示添加右子树
int BinTreeAddNode(ChainBinTree *bt,ChainBinTree *node,int n)
{
if(bt==NULL)
{
printf("父结点不存在,请先设置父结点!\n");
return 0;
}
switch(n)
{
case 1: //添加到左结点
if(bt->left) //左子树不为空
{
printf("左子树不为空!\n");
return 0;
}
else
bt->left=node;
break;
case 2: //添加到右结点
if(bt->right) //右子树不为空
{
printf("右子树结点不为空!\n");
return 0;
}
else
bt->right=node;
break;
default:
printf("参数错误!\n");
return 0;
}
return 1;
}
//分别获取二叉树的左右子树
ChainBinTree *BinTreeLeft(ChainBinTree *bt) //返回左子结点
{
if(bt)
return bt->left;
else
return NULL;
}
ChainBinTree *BinTreeRight(ChainBinTree *bt) //返回右子结点
{
if(bt)
return bt->right;
else
return NULL;
}
//获取二叉树的状态,即判断二叉树是否为空和计算深度
int BinTreeIsEmpty(ChainBinTree *bt) //检查二叉树是否为空,为空则返回1,否则返回0
{
if(bt)
return 0;
else
return 1;
}
int BinTreeDepth(ChainBinTree *bt) //求二叉树深度
{
int dep1,dep2;
if(bt==NULL)
return 0;
else
{
dep1=BinTreeDepth(bt->left); //左子树深度(递归调用)
dep2=BinTreeDepth(bt->right); //右子树深度(递归调用)
if(dep1>dep2)
return dep1+1;
else
return dep2+1;
}
}
/*进行查找操作,即再二叉树中查找数据,此时需要遍历二叉树的所有结点,
逐个比较数据,当找到目标数据时将返回该数据所在结点的指针*/
ChainBinTree *BinTreeFind(ChainBinTree *bt,DATA data) //在二叉树中查找值为data的结点
{
ChainBinTree *p;
if(bt==NULL)
return NULL;
else
{
if(bt->data==data)
return bt;
else //分别向左右子书递归查找
{
if(p=BinTreeFind(bt->left,data))
return p;
else if(p=BinTreeFind(bt->right,data))
return p;
else return NULL;
}
}
}
/*清空二叉树
在添加结点时,通过使用malloc()函数来申请分配每个结点的内存,
所以在清空二叉树时必须使用free()函数来释放结点所占内存。
由此可见,清空二叉树的操作就是释放各结点所占内存的操作。*/
void BinTreeClear(ChainBinTree *bt)
{
if(bt)
{
BinTreeClear(bt->left); //清空左子树
BinTreeClear(bt->right); //清空右子树
free(bt); //释放当前结点所占内存
bt=NULL;
}
return ;
}
层次关系结构-----树----二叉树
最新推荐文章于 2022-12-14 11:21:18 发布