天天看點

二叉樹的建立與遞歸周遊C語言版

</pre><pre name="code" class="cpp">#include <stdio.h>
#include <malloc.h>


typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;


void createTree(BTNode* *T)
{
char ch = getchar();
if(ch=='#') 
{
*T=NULL;
return;
}
(*T) = (BTNode*)malloc(sizeof(BTNode));
(*T)->data = ch;
createTree(&(*T)->lchild);
createTree(&(*T)->rchild);
}
 
void preOrder(BTNode *T)//先序周遊
{
if(T==NULL) return;
printf("%c\t", T->data);
if(T->lchild!=NULL)
preOrder(T->lchild);
if(T->rchild != NULL)
preOrder(T->rchild);
}


void inOrder(BTNode *T)//中序周遊
{
if(T==NULL) return;

if(T->lchild!=NULL)
inOrder(T->lchild);
printf("%c\t", T->data);
if(T->rchild != NULL)
inOrder(T->rchild);
}


void postOrder(BTNode *T)//後序周遊
{
if(T==NULL) return;

if(T->lchild!=NULL)
postOrder(T->lchild);
if(T->rchild != NULL)
postOrder(T->rchild);
printf("%c\t", T->data);
}


int main(int argc, char const *argv[])
{
BTNode *T;
createTree(&T);
puts("PreOrder visit:");
preOrder(T);
putchar('\n');


puts("inOrder visit:");
inOrder(T);
putchar('\n');


puts("PostOrder visit:");
postOrder(T);
putchar('\n');
return 0;
}
/*運作結果:


ABD###C##
PreOrder visit:
A       B       D       C
inOrder visit:
D       B       A       C
PostOrder visit:
D       B       C       A
請按任意鍵繼續. . .*/