Head.H
typedef struct _tnode
{
int ele;
struct _tnode *ltree;
struct _tnode *rtree;
}TNode, *tnode;
tnode InitTree(int size);
void PrintAimNode(tnode T, int level);
void PrintTreeStructure(tnode T);
void PrintTree_A(tnode T);
void PrintTree_B(tnode T);
void PrintTree_C(tnode T);
int GetTreeDeepth(tnode T);
tnode FindTreeAimVal(tnode T, int aimval);
void FindTreeAimNode(tnode T, int aimval, tnode aimaddress);
Function.C
//创建树
tnode InitTree(int size)
{
if (size == 0)
{
return NULL;
}
tnode T = (tnode)malloc(sizeof(TNode));
T->ele = size;
T->ltree = InitTree(size - 1);
T->rtree = InitTree(size - 1);
return T;
}
//打印树某一层全部节点
void PrintAimNode(tnode T, int level)//打印二叉树某一层的结点所有节点的值
{
if (T == NULL)
{
return;
}
else
{
if (level == 1)
{
printf("%d", T->ele);
}
else {
PrintAimNode(T->ltree, level - 1);
PrintAimNode(T->rtree, level - 1);
}
}
}
//打印二叉树整体结构
void PrintTreeStructure(tnode T)
{
int i;
int length = GetTreeDeepth(T);
for (i = 1; i <= length; i++)
{
PrintAimNode(T, i);
printf("\n");
}
}
//先序遍历
void PrintTree_A(tnode T)
{
if (T != NULL)
{
printf("%d", T->ele);
PrintTree_A(T->ltree);
PrintTree_A(T->rtree);
}
}
//中序遍历
void PrintTree_B(tnode T)
{
if (T != NULL)
{
PrintTree_A(T->ltree);
printf("%d", T->ele);
PrintTree_A(T->rtree);
}
}
//后序遍历
void PrintTree_C(tnode T)
{
if (T != NULL)
{
PrintTree_A(T->ltree);
PrintTree_A(T->rtree);
printf("%d", T->ele);
}
}
//测深度
int GetTreeDeepth(tnode T)
{
int h1, h2;
if (T == NULL)
{
return 0;
}
h1 = GetTreeDeepth(T->ltree);
h2 = GetTreeDeepth(T->rtree);
if (h1 > h2)
{
return(h1 + 1);
}
else
{
return(h2 + 1);
}
}
//查找目标值对应的地址
tnode FindTreeAimVal(tnode T, int aimval)
{
if (T != NULL)
{
if (T->ele == aimval)
{
return T;
}
FindTreeAimVal(T->ltree, aimval);
FindTreeAimVal(T->rtree, aimval);
}
}
//不好用
void FindTreeAimNode(tnode T, int aimval, tnode aimaddress)
{
tnode tempaddress;
tempaddress = FindTreeAimVal(T, aimval);
if (tempaddress != NULL)
{
aimaddress = tempaddress;
}
else
{
printf("Can not find the val!!!");
}
}
Main.C
void main(void)
{
tnode T = InitTree(4);
PrintTree_A(T);
printf("\n");
PrintTree_B(T);
printf("\n");
PrintTree_C(T);
printf("\n");
printf("%d \n", GetTreeDeepth(T));
/*tnode aimaddress = (tnode*)malloc(sizeof(tnode));
aimaddress = FindTreeAimVal(T, 1);
printf("%d\n", aimaddress->ele);*/
tnode aimaddress = FindTreeAimVal(T, 3);
if (aimaddress != NULL)
{
printf("find the val: %d\n", aimaddress->ele);
}
else
{
printf("cannot find\n");
}
PrintTreeStructure(T);
printf("\n");
system("pause");
}