typedef char DataTypec;
/* 二叉树的结点类型 */
typedef struct BitNode
{
DataTypec data;
struct BitNode *lchild,*rchild;
}BitNode,*BitTree;
/* 初始化二叉树,即把树根指针置空 */
void BinTreeInit(BitTree BT);
/* 按先序次序建立一个二叉树*/
void BinTreeCreat(BitTree BT);
/* 检查二叉树是否为空 */
int BinTreeEmpty(BitTree *BT);
/* 按任一种遍历次序(包括按先序、中序、后序、按层次)输出二叉树中的所有结点 */
void CreateBiTree1(BitTree &BT);
/* 求二叉树的深度 */
int BinTreeDepth(BitTree BT);
/* 求二叉树中所有结点数 */
int BinTreeCount(BitTree BT);
/* 清除二叉树,使之变为空树 */
void BinTreeClear(BitTree BT);
void BinTreeInit(BitTree BT)
{
BT = (BitTree)malloc(sizeof(BitNode));
BT->lchild = BT->rchild = NULL;
}
void BinTreeCreat(BitTree BT)
{
if (BT)
{
printf("%d",BT->data);
BinTreeCreat(BT->lchild);
BinTreeCreat(BT->rchild);
}
}
int BinTreeEmpty(BitTree *BT)
{
if (BT == NULL)
return 1;
else
return 0;
}
void CreateBiTree1(BitTree &BT)//先序创建二叉树
{ char ch;
scanf("%c",ch);
if (ch == '#') BT = NULL;
else{
BT = new BitNode;
BT->data = ch;
CreateBiTree1(BT->lchild);
CreateBiTree1(BT->rchild);
}
}
BitTree BinTreeCreate()
{
BitTree r;
char s;
printf("请输入结点值,在A~Z之间\n");
do{
s = getchar();
} while (s<'A' || s>'Z');
r = (BitTree)malloc(sizeof(BitNode));
r->data = s;
printf("");
do
{
s = getchar();
} while (s != 'Y'&&s != 'N');
if (s == 'Y')
r->lchild = BinTreeCreate();
return r;
}
int BinTreeDepth(BitTree BT)//树的深度
{
if (BT == NULL)
return 0;
else
{
int m = BinTreeDepth(BT->lchild);
int n = BinTreeDepth(BT->rchild);
if (m > n) return (m + 1);
else return (n + 1);
}
}
int BinTreeCount(BitTree BT)
{
if (!BT) return 0;
if (!BT->lchild &&!BT->rchild)
return 1;
else
return BinTreeCount(BT->lchild) + BinTreeCount(BT->rchild);
}
void BinTreeClear(BitTree BT)
{
if (BT == NULL)
printf("树为空");
//左右子树找到底,然后返回的时候依次销毁空间
BinTreeClear(BT->lchild);
BinTreeClear(BT->rchild);
free(BT);
BT = NULL;
}