二叉树的访问
本节主要以递归的方式访问树节点,分为先序,中序,后序
模拟树:
/*
1
2 3
4 5
*/
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild; //左孩子 右孩子
}BiTNode, *BiTree;
void PreOrder(BiTNode *T)
{
if (T != NULL)
{
printf("%d ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTNode *T)
{
if (T != NULL)
{
InOrder(T->lchild);
printf("%d ", T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTNode *T)
{
if (T != NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%d ", T->data);
}
}
void main()
{
BiTNode b1, b2, b3, b4, b5;
memset(&b1, 0, sizeof(BiTNode));
memset(&b2, 0, sizeof(BiTNode));
memset(&b3, 0, sizeof(BiTNode));
memset(&b4, 0, sizeof(BiTNode));
memset(&b5, 0, sizeof(BiTNode));
b1.data = 1;
b2.data = 2;
b3.data = 3;
b4.data = 4;
b5.data = 5;
//构建树关系
b1.lchild = &b2;
b1.rchild = &b3;
b2.lchild = &b4;
b3.lchild = &b5;
printf("\n先根遍历");
PreOrder(&b1);
printf("\n中根遍历");
InOrder(&b1);
printf("\n后根遍历");
PostOrder(&b1);
system("pause");
}
结果: