樹的三種遍歷方式解析

2021-10-03 14:42:38 字數 1085 閱讀 2832

二叉樹的遍歷分為以下三種:

先序遍歷:遍歷順序規則為【根左右】

中序遍歷:遍歷順序規則為【左根右】

後序遍歷:遍歷順序規則為【左右根】

什麼是【根左右】?就是先遍歷根,再遍歷左孩子,最後遍歷右孩子;

舉個例子,看下圖(圖從網上找的):

先序遍歷:abcdefghk

中序遍歷:bdcaehgkf

後序遍歷:dcbhkgfea

以中序遍歷為例:

中序遍歷的規則是【左根右】,我們從root節點a看起;

此時a是根節點,遍歷a的左子樹;

a的左子樹存在,找到b,此時b看做根節點,遍歷b的左子樹;

b的左子樹不存在,返回b,根據【左根右】的遍歷規則,記錄b,遍歷b的右子樹;

b的右子樹存在,找到c,此時c看做根節點,遍歷c的左子樹;

c的左子樹存在,找到d,由於d是葉子節點,無左子樹,記錄d,無右子樹,返回c,根據【左根右】的遍歷規則,記錄c,遍歷c的右子樹;

c的右子樹不存在,返回b,b的右子樹遍歷完,返回a;

至此,a的左子樹遍歷完畢,根據【左根右】的遍歷規則,記錄a,遍歷a的右子樹;

a的右子樹存在,找到e,此時e看做根節點,遍歷e的左子樹;

e的左子樹不存在,返回e,根據【左根右】的遍歷規則,記錄e,遍歷e的右子樹;

e的右子樹存在,找到f,此時f看做根節點,遍歷f的左子樹;

f的左子樹存在,找到g,此時g看做根節點,遍歷g的左子樹;

g的左子樹存在,找到h,由於h是葉子節點,無左子樹,記錄h,無右子樹,返回g,根據【左根右】的遍歷規則,記錄g,遍歷g的右子樹;

g的右子樹存在,找到k,由於k是葉子節點,無左子樹,記錄k,無右子樹,返回g,根據【左根右】的遍歷規則,記錄f,遍歷f的右子樹;

f的右子樹不存在,返回f,e的右子樹遍歷完畢,返回a;

至此,a的右子樹也遍歷完畢;

最終我們得到上圖的中序遍歷為bdcaehgkf,無非是按照遍歷規則來的;

根據「中序遍歷」的分析,相信先序遍歷和後序遍歷也可以輕鬆寫出~

樹的三種遍歷

目錄二叉樹的中序遍歷 遞迴 二叉樹的後序遍歷 遞迴 總結 中序遍歷的堆疊實現 非遞迴 層次遍歷的佇列實現 兩種遍歷確定唯一的二叉樹 必須含中序遍歷 1.先訪問根節點 2.左子樹遞迴呼叫先序遍歷 3.右子樹遞迴呼叫先序遍歷void preorder bintree bt a bdfe cghi 1.中...

List遍歷 三種方式

對list的遍歷有三種方式 listlist new arraylist list.add new a list.add new a 第一種 for iteratorit list.iterator it.hasnext 這種方式在迴圈 執行過程中會進行資料鎖定,效能稍差,同時,如果你想在尋歡過程中...

遍歷List的三種方式

對list的遍歷有三種方式 listlist new arraylist list.add new a list.add new a 第一種 for iteratorit list.iterator it.hasnext 這種方式在迴圈 執行 過程中會進行資料鎖定,效能稍差,同時,如果你想在尋歡過程...