二叉樹的創建和三種遍歷方式
幫同學寫作業順帶復習了一下
直接丟代碼了:
#include <stdio.h>
#include <stdlib.h>
// 二叉樹節點結構體&指針類型
typedef struct BiTNode
{
char data; // 數據域
struct BiTNode* lchild; // 左孩子
struct BiTNode* rchild; // 右孩子
}BiTNode, *BiTree;
void CreateBiTree(BiTree &T){
// 前序遍歷創建二叉樹
char data;
scanf("%c", &data);
if (data != '#'){ // 遇到#表示當前樹結束
T = new BiTNode; // 生成根節點
T->data = data; // 給數據域賦值
CreateBiTree(T->lchild); // 遞歸創建左子樹
CreateBiTree(T->rchild); // 遞歸創建右子樹
}else{
T = NULL; // 空樹
}
}
// 前序遍歷
void PreOrderTraverse(BiTree T){
if(T){
printf("%c ", T->data); // 訪問根節點
PreOrderTraverse(T->lchild); // 遞歸前序遍歷左子樹
PreOrderTraverse(T->rchild); // 遞歸前序遍歷右子樹
}
}
// 中序遍歷
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild); // 遞歸中序遍歷左子樹
printf("%c ", T->data); // 訪問根節點
InOrderTraverse(T->rchild); // 遞歸中序遍歷右子樹
}
}
// 后序遍歷
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild); // 遞歸后序遍歷左子樹
PostOrderTraverse(T->rchild); // 遞歸后序遍歷右子樹
printf("%c ", T->data); // 訪問根節點
}
}
int main(){
BiTree bt = NULL;
CreateBiTree(bt);
printf("\n前序遍歷:");
PreOrderTraverse(bt);
printf("\n中序遍歷:");
InOrderTraverse(bt);
printf("\n后序遍歷:");
PostOrderTraverse(bt);
return 0;
}
over.