二叉樹遍歷(先序遍歷,中序遍歷,後序遍歷)
阿新 • • 發佈:2019-01-29
資料結構學習筆記
一.先序遍歷
先序遍歷二叉樹遞迴定義
if(二叉樹為空)
遍歷結束;
else
訪問根節點,先序遍歷根的左子樹,先序遍歷根的右子樹
基於二叉連結串列
------
typedef struct BiNode *BiTree; //節點指標型別 status PreOrderTraverse(BiNode T,status(*visit)(TElemType &e)) { //先序遍歷二叉樹 if(T) { visit(T->Data); //訪問節點 PreorderTraverse(T->lchild,visit);//遍歷左子樹 PreorderTraverse(T->rchild,visit);//遍歷右子樹 } }
二.中序遍歷
先序遍歷二叉樹遞迴定義
if(二叉樹為空)
遍歷結束;
else
訪問根的左子樹,訪問中序根節點,中序遍歷根的右子樹
typedef struct BiNode *BiTree; //節點指標型別 void InOrderTraverse(BiTree T) { //先序遍歷二叉樹 if(T) { InOrderTraverse(T->lchild); //遞迴訪問左子樹 printf("%c",T->data); //遞迴結點 InOrderTraverse(T->rchild); //遞迴訪問右子樹 } return; }
三.後序遍歷
先序遍歷二叉樹遞迴定義
if(二叉樹為空)
遍歷結束;
else
後遍歷根的左子樹,後序遍歷根的右子樹,訪問根節點
typedef struct BiNode *BiTree; //節點指標型別 void PostOrderTraverse(BiTree T) { //先序遍歷二叉樹 if(T) { PostOrderTraverse(T->lchild); //遞迴訪問左子樹 PostOrderTraverse(T->rchild); //遞迴訪問右子樹 printf("%c",T->data); //遞迴結點 } return; }
說明:
三種遍歷方式訪問節點順序相同,從根節點出發再回 到根節點
不同的是訪問時機, 先序遍歷首次遇到該節點便訪問,中序是第二次遇到訪問
後序是第三次遇到同一節點再訪問