#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void CreatBiTree(BiTree &T)
{
int e;
scanf("%d", &e);
if(e==0)
{
T = NULL;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = e;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T)
{
if(T != NULL)
{
printf("%d ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
if(T != NULL)
{
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
// printf("\n");
}
void PostOrderTraverse(BiTree T)
{
if(T != NULL)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%d ", T->data);
}
}
int CountLeaves(BiTree T)
{
if(T != NULL)
{
if(T->lchild==NULL && T->rchild==NULL)
{
return 1;
}
else
{
return CountLeaves(T->lchild) + CountLeaves(T->rchild);
}
}
else
return 0;
}
//void LevelOrderTraverse(BiTree T)
//{
// if(T != NULL)
// {
// printf()
// }
//}
int TreeDepth(BiTree T)
{
if(T==NULL)
return 0;
return TreeDepth(T->lchild)+1 > TreeDepth(T->rchild)+1 ? TreeDepth(T->lchild)+1:TreeDepth(T->rchild)+1;
}
void DestroyTree(BiTree &T)
{
if(T != NULL)
{
DestroyTree(T->lchild);
DestroyTree(T->rchild);
free(T);
T = NULL;
}
}
void Exchange_L_R_child(BiTree &T)
{
if(T != NULL)
{
BiTree tmp;
tmp = (BiTNode *)malloc(sizeof(BiTNode));
if(T->lchild!=NULL || T->rchild!=NULL)
{
tmp = T->lchild;
T->lchild = T->rchild;
T->rchild = tmp;
Exchange_L_R_child(T->lchild);
Exchange_L_R_child(T->rchild);
}
}
}
int main()
{
int leaves, tree_depth;
BiTree bitree;
printf("Creat tree\n");
CreatBiTree(bitree);
PreOrderTraverse(bitree);
printf("\n");
InOrderTraverse(bitree);
printf("\n");
PostOrderTraverse(bitree);
printf("\n");
leaves = CountLeaves(bitree);
printf("Tree leaves are %d.\n", leaves);
tree_depth = TreeDepth(bitree);
printf("Tree depth is %d.\n",tree_depth);
printf("Now destroy the tree!\n");
Exchange_L_R_child(bitree);
printf("After exchange left and right child.\n");
InOrderTraverse(bitree);
printf("\n");
DestroyTree(bitree);
printf("Done!\n");
return 0;
}