2018.11.15
前序遍歷:根->左->右
中序遍歷:左->根->右
後序遍歷:左->右->根
//二叉樹遍歷遞歸方式實現
//2018.11.15 青春如詩
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef char ElementType;
typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode
{
ElementType Data;
BinTree Left;
BinTree Right;
};
//判斷二叉樹是否爲空
bool IsEmpty(BinTree BT)
{
return BT==NULL;
}
//創建節點
BinTree CreateTreeNode(char ch)
{
BinTree BT = (BinTree)malloc(sizeof(struct TreeNode));
BT->Data=ch;
BT->Left = NULL;
BT->Right = NULL;
return BT;
}
//創建二叉樹
BinTree CreateBinTree()
{
BinTree BT = CreateTreeNode('A');
BT->Left = CreateTreeNode('B');
BT->Right = CreateTreeNode('C');
BT->Left->Left = CreateTreeNode('D');
BT->Left->Right = CreateTreeNode('F');
BT->Right->Left = CreateTreeNode('G');
BT->Right->Right = CreateTreeNode('I');
BT->Left->Right->Left = CreateTreeNode('E');
BT->Right->Left->Right = CreateTreeNode('H');
return BT;
}
void DeleteTree(BinTree *BT)
{
if (*BT)
{
DeleteTree(&((*BT)->Left));
DeleteTree(&((*BT)->Right));
*BT = NULL;
free(*BT);
}
}
//先序遍歷
void PreOrderTraversal(BinTree BT)
{
if (BT)
{
printf("%c->", BT->Data);
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
}
}
//中序遍歷
void InOrderTraversal(BinTree BT)
{
if (BT)
{
InOrderTraversal(BT->Left);
printf("%c->", BT->Data);
InOrderTraversal(BT->Right);
}
}
//後序遍歷
void PostOrderTraversal(BinTree BT)
{
if (BT)
{
PostOrderTraversal(BT->Left);
PostOrderTraversal(BT->Right);
printf("%c->", BT->Data);
}
}
int main()
{
BinTree BT = CreateBinTree();
printf("先序遍歷:\n");
PreOrderTraversal(BT);
printf("\n後序遍歷:\n");
InOrderTraversal(BT);
printf("\n後序遍歷:\n");
PostOrderTraversal(BT);
DeleteTree(&BT);
return 0;
}