二叉树的三种递归遍历算法
二叉树本身是一种递归的数据类型,二叉树的许多操作离不开递归。
include <stdio.h>
include<stdlib.h>
include<stdbool.h>
typedef int TElemtype;
typedef struct BiTNode
{
TElemtype Data;
int IfVisited;
struct BiTNode* Lchild, * Rchild;
}BiTNode;
typedef BiTNode* BiTree;
void PrintTree(BiTree Tree)
{
printf("%d ", Tree->Data);
}
void PreOrder(BiTree Tree, void(*Visit)(BiTree))
{
if (Tree) {
Visit(Tree);
PreOrder(Tree->Lchild, Visit);
PreOrder(Tree->Rchild, Visit);
}
}
void InOrder(BiTree Tree, void(*Visit)(BiTree))
{
if (Tree)
{
InOrder(Tree->Lchild, Visit);
Visit(Tree);
InOrder(Tree->Rchild, Visit);
}
}
void PostOrder(BiTree Tree, void (*Visit)(BiTree))
{
if (Tree)
{
PostOrder(Tree->Lchild, Visit);
PostOrder(Tree->Rchild, Visit);
Visit(Tree);
}
}
BiTree CreateNode(int item)
{
BiTree t = (BiTree)malloc(sizeof(BiTNode));
t->Data = item;
t->IfVisited = false;
t->Lchild = NULL;
t->Rchild = NULL;
return t;
}
int main()
{
BiTree N[9];
for (int i = 0; i < 9; i++) { N[i] = CreateNode(i); N[i]->IfVisited = 0; }
N[0]->Lchild = N[1]; N[0]->Rchild = N[2];
N[1]->Lchild = N[3];
N[2]->Lchild = N[4]; N[2]->Rchild = N[5];
N[3]->Rchild = N[6];
N[6]->Lchild = N[7]; N[6]->Rchild = N[8];
}

浙公网安备 33010602011771号