遞迴遍歷二叉樹--C語言
阿新 • • 發佈:2019-01-08
之前寫了關於二叉樹的非遞迴遍歷演算法的程式碼,今天把二叉樹的遞迴遍歷演算法的程式碼補上,內容很簡單!但是今天也算是寫了一會兒程式碼了~姑且這麼認為吧~
程式碼:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
char data;//二叉樹節點資料
struct BiTNode *lchild;//二叉樹節點左子樹指標
struct BiTNode *rchild;//二叉樹節點右子樹指標
}BiTNode,*BiTree;//二叉樹節點
//二叉樹先序遍歷
void PreBiTree(BiTree T)
{
if(NULL == T)
{
return;
}
printf("%c ",T->data);
PreBiTree(T->lchild);
PreBiTree(T->rchild);
}
//二叉樹中序遍歷
void InBiTree(BiTree T)
{
if(NULL == T)
{
return;
}
InBiTree(T->lchild);
printf("%c ",T->data);
InBiTree (T->rchild);
}
//二叉樹後序遍歷
void PostBiTree(BiTree T)
{
if(NULL == T)
{
return;
}
PostBiTree(T->lchild);
PostBiTree(T->rchild);
printf("%c ",T->data);
}
//建立二叉樹
void CreateBiTree(BiTree *T)
{
char ch;
scanf("%c",&ch);
if('#' == ch)
{
* T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
int main()
{
BiTree T = NULL;
printf("請按照先序遍歷的順序輸入要建立的二叉樹\n");
CreateBiTree(&T);
printf("二叉樹的先序遍歷:");
PreBiTree(T);
printf("\n");
printf("二叉樹的中序遍歷:");
InBiTree(T);
printf("\n");
printf("二叉樹的後序遍歷:");
PostBiTree(T);
printf("\n");
return 0;
}
執行結果:
這次呼叫建立二叉樹的函式採用了對T取地址的方式,而不是之前的直接傳入T引數的方式。CreateBiTree函式的入參的形式也相應的改為BiTreeT,這是因為呼叫的時候傳入的是T指標的地址,相當於是指標的指標,所以這裡要定義成BiTreeT。之前的程式碼裡定義的是CreateBiTree(BiTree &T),這是C++的寫法,意思是傳的是地址,不是值。兩種寫法的效果一致,但是一個是C語言寫法,一個是C++寫法,之前沒有特別關注這個,但是其實風格還是差別挺大的。以後要多注意這類問題,不能再把C語言的語法和C++的語法弄混了!