對於二叉樹:
的幾種遍歷方式
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); } }