一.前序遍历
前序遍历是首先访问根节点,然后是左子树,最后是右子树。如下图结果是12,13,15,16,14,17,18
void print(binTree b) //前序遍历
{
if (b)
{
printf("%d\n", b->element);
print(b->leftChild);
print(b->rightChild);
}
}
二:中序遍历
中序遍历是首先访问左子树,然后是根节点,最后是右子树。如上图结果为15,13,16,12,17,14,18
void print(binTree b) //中序遍历
{
if (b)
{
print(b->leftChild);
printf("%d\n", b->element);
print(b->rightChild);
}
}
三:后序遍历
后序遍历是指首先访问左子树,然后是右子树,最后是根节点.如上图结果为:15,16,13,17,18,14,12.
void print(binTree b) //后序遍历
{
if (b)
{
print(b->leftChild);
print(b->rightChild);
printf("%d\n", b->element);
}
}
注:完整代码。三种遍历方式是注释的那部分代码
#include <stdio.h>
#include <stdlib.h>
typedef struct binNode* binTree;
struct binNode
{
int element;
binTree leftChild, rightChild;
};
binTree creatBinTree()
{
int n;
binTree b;
scanf("%d", &n);
if (0 == n)
b = NULL;
else
{
b = (binTree)malloc(sizeof(struct binNode));
b->element = n;
b->leftChild = creatBinTree();
b->rightChild = creatBinTree();
}
return b;
}
//void print(binTree b) //前序遍历
//{
// if (b)
// {
// printf("%d\n", b->element);
// print(b->leftChild);
// print(b->rightChild);
// }
//}
//void print(binTree b) //中序遍历
//{
// if (b)
// {
// print(b->leftChild);
// printf("%d\n", b->element);
// print(b->rightChild);
// }
//}
//void print(binTree b) //后序遍历
//{
// if (b)
// {
// print(b->leftChild);
// print(b->rightChild);
// printf("%d\n", b->element);
// }
//}
int main(void)
{
binTree binT = creatBinTree();
print(binT);
return 0;
}
。