定义二叉树
#include<stdio.h>
#include<stdlib.h>
#define QUEUE_MAXSIZE 50
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;
}
添加新节点到二叉树
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 1:
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);
return dep1>dep2?dep1+1:dep2+1;
}
}
二叉树查找
ChainBinTree *BinTreeFind(ChainBinTree *bt,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;
}
}
}
清空二叉树
void BinTreeClear(ChainBinTree *bt)
{
if(bt)
{
BinTreeClear(bt->left);
BinTreeClear(bt->right);
free(bt);
bt=NULL;
}
return;
}