二叉樹中的三種遍歷方式
對于二叉樹:
的幾種遍歷方式
1、先序遍歷:先序遍歷是先輸出根節點,再輸出左子樹,最后輸出右子樹。上圖的先序遍歷結果就是:ABCDEF
2、中序遍歷:中序遍歷是先輸出左子樹,再輸出根節點,最后輸出右子樹。上圖的中序遍歷結果就是:CBDAEF
3、后序遍歷:后序遍歷是先輸出左子樹,再輸出右子樹,最后輸出根節點。上圖的后序遍歷結果就是:CDBFEA
#include <stdio.h>
#include <stdlib.h>
typedef char TelemType;
typedef struct TNode{
TelemType data;
struct TNode *lchild,*rchild;
} BitNode;
//聲明
BitNode* createTree(void);
void preOrderTraverse(BitNode *);
void inOrderTraverse(BitNode *);
void lastOrderTraverse(BitNode *);
int main(int agrc,char *argv[]){
BitNode *root=NULL;
root=createTree();
printf("\n先序遍歷二叉樹:");
preOrderTraverse(root);
printf("\n中序遍歷二叉樹:");
inOrderTraverse(root);
printf("\n后序遍歷二叉樹:");
lastOrderTraverse(root);
return 0;
}
//創建二叉樹
BitNode* createTree(void){
BitNode *b;
TelemType ch;
scanf("%c",&ch);
if(ch=='#'){
b=NULL;
}else{
b=(BitNode *)malloc(sizeof(BitNode));
b->data=ch;
b->lchild=createTree();
b->rchild=createTree();
}
return b;
}
//先序遍歷
void preOrderTraverse(BitNode *root){
if(root){
printf("%c",root->data);
preOrderTraverse(root->lchild);
preOrderTraverse(root->rchild);
}
}
//中序遍歷
void inOrderTraverse(BitNode *root){
if(root){
inOrderTraverse(root->lchild);
printf("%c",root->data);
inOrderTraverse(root->rchild);
}
}
//后序遍歷
void lastOrderTraverse(BitNode *root){
if(root){
lastOrderTraverse(root->lchild);
lastOrderTraverse(root->rchild);
printf("%c",root->data);
}
}

浙公網安備 33010602011771號