#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 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)
{
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)
{
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;
}