快速判斷二叉樹先序遍歷 後序遍歷

2022-09-17 14:18:16 字數 1482 閱讀 4235

一、知道二叉樹的先序/後序遍歷和中序遍歷(中序必須要知道,不然無法判斷),要快速判斷後序/先序遍歷,首先要了解二叉樹的遍歷規律

二、二叉樹遍歷規律

1、三種遍歷都有乙個規律,就是:逆時針沿著二叉樹外緣移動,即方向相同,如下圖1:

圖12、

3、  不同的是他們出發點不同,下面說明他們的出發點和遍歷順序序列

三、二叉樹三種遍歷

1、先序遍歷

先序遍歷先從二叉樹的根開始,然後到左子樹,再到右子樹,,如圖2

圖2先序遍歷序列是abdcef,重點是記住第乙個字母「a」是根,出發點是根「a」

2、中序遍歷

中序遍歷先從左子樹開始,然後到根,再到右子樹,如圖3

圖3即中序遍歷序列是dbaecf,重點是記住中序遍歷的根位置,是在序列的第乙個字母和最後乙個字母之間,出發點是左子樹的最下邊的左邊的開始,(為什麼到a之後直接跳過c呢?因為c也是e和f的根,所以按照中序遍歷規律,先到e再到c再到f)

3、後序遍歷

後序遍歷先從左子樹開始,然後到右子樹,再到根,如圖4

圖4即後序遍歷序列式dbecfca,重點是知道了根是最後面乙個字母「a」, 出發點是左子樹的最下邊左邊。

四、道了先序遍歷和中序遍歷,或者是後序遍歷和中序遍歷,判斷出後序遍歷,或者是先序遍歷的方法

比如知道先序遍歷是abdcef,中序遍歷是dbaecf,那麼可以從先序遍歷知道這個二叉樹的根是a,(如果是選擇題,可以快速判斷出後序遍歷的序列最後面乙個字母肯定是a,然後選擇最後面有a的選項)

從中序遍歷看出a把db和ecf隔開,即db \a \ecf,因此可以知道db屬於左子樹,ecf屬於右子樹

如果是填空題就要寫出該二叉樹的圖,先寫出左子樹,從中序遍歷知道db是右子樹,把db看成乙個整體,則從先序遍歷判斷可以確定b是d的根,這樣就確定出左子樹的圖是

把ecf右子樹看成乙個整體,則從先序遍歷可以知道c是e和f的根,確定出右子樹是

然後把兩個子樹連在根「a」的下面,再根據後序遍歷規律讀出序列就可以了

二叉樹先序遍歷 中序遍歷 後序遍歷

輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...

二叉樹先序遍歷 後序遍歷 中序遍歷

從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...

二叉樹先序遍歷 中序遍歷 後序遍歷

二叉樹先序遍歷 中序遍歷 後序遍歷 include include typedef struct bitnodebitnode,bitree void visit bitnode c 先序遍歷 void preorder bitree t 中序遍歷 void inorder bitree t 後序遍...