對於二叉樹:blog
的幾種遍歷方式get
一、先序遍歷:先序遍歷是先輸出根節點,再輸出左子樹,最後輸出右子樹。上圖的先序遍歷結果就是:ABCDEFit
二、中序遍歷:中序遍歷是先輸出左子樹,再輸出根節點,最後輸出右子樹。上圖的中序遍歷結果就是:CBDAEFio
三、後序遍歷:後序遍歷是先輸出左子樹,再輸出右子樹,最後輸出根節點。上圖的後序遍歷結果就是:CDBFEAast
#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); } }