/*
* Copyright (c) 2017,煙臺大學計算機學院
* All right reserved.
* 文件名稱:btree
* 作者:尹娜
* 完成日期:2017年10月31日
* 版本號:v1.0
*
* 問題描述:二叉樹遍歷的遞歸算法
* 輸入描述:標準函數輸入
* 程序輸出:遍歷序列
*/
問題描述:
實現二叉樹的先序、中序、後序遍歷的遞歸算法,並對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創建的二叉樹進行測試。
請利用二叉樹算法庫。
(利用btreee.h見算法庫)
注:在main函數中,創建的用於測試的二叉樹如下——
#include <stdio.h>
#include "btree.h"
void PreOrder(BTNode *b) //先序遍歷的遞歸算法
{
if (b!=NULL)
{
printf("%c ",b->data); //訪問根節點
PreOrder(b->lchild); //遞歸訪問左子樹
PreOrder(b->rchild); //遞歸訪問右子樹
}
}
void InOrder(BTNode *b) //中序遍歷的遞歸算法
{
if (b!=NULL)
{
InOrder(b->lchild); //遞歸訪問左子樹
printf("%c ",b->data); //訪問根節點
InOrder(b->rchild); //遞歸訪問右子樹
}
}
void PostOrder(BTNode *b) //後序遍歷的遞歸算法
{
if (b!=NULL)
{
PostOrder(b->lchild); //遞歸訪問左子樹
PostOrder(b->rchild); //遞歸訪問右子樹
printf("%c ",b->data); //訪問根節點
}
}
int main()
{
BTNode *b;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉樹b:");
DispBTNode(b);
printf("\n");
printf("先序遍歷序列:\n");
PreOrder(b);
printf("\n");
printf("中序遍歷序列:\n");
InOrder(b);
printf("\n");
printf("後序遍歷序列:\n");
PostOrder(b);
printf("\n");
DestroyBTNode(b);
return 0;
}
運行結果: