1. 程式人生 > >遞迴遍歷二叉樹--C語言

遞迴遍歷二叉樹--C語言

  之前寫了關於二叉樹的非遞迴遍歷演算法的程式碼,今天把二叉樹的遞迴遍歷演算法的程式碼補上,內容很簡單!但是今天也算是寫了一會兒程式碼了~姑且這麼認為吧~

程式碼:

#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++的語法弄混了!