二叉樹的前序遍歷 中序遍歷和後序遍歷之間還原二叉樹

2021-09-18 07:06:43 字數 1383 閱讀 4823

1、概念

(1)前序遍歷

a、訪問根節點;b、前序遍歷左子樹;c、前序遍歷右子樹。

(2)中序遍歷

a、中序遍歷左子樹;b、訪問根節點;c、中序遍歷右子樹。

(3)後序遍歷

a、後序遍歷左子樹;b、後續遍歷右子樹;c、訪問根節點。

2、前序遍歷和中序遍歷還原二叉樹

思想如下:

a、根據前序遍歷結果,第乙個元素為二叉樹的根結點;

b、觀察中序遍歷結果,根結點左側的為左子樹,若左子樹根結點前(後)再無任何元素,則左(右)子樹的左分支為空;根結點右側的為右子樹,若右子樹根結點前(後)再無任何元素,則左(右)子樹的左分支為空;

c、上面的過程是遞迴的。先找到當前樹的根結點,然後劃分為左右子樹,再進入左子樹重複上面的過程,最後進入右子樹重複上面的過程,最終還原一棵樹。

例:已知前序遍歷:abdhiejkcflmgno

中序遍歷:hdibjekalfmcngo

按照上述步驟先畫出二叉樹,然後在進行求解後序遍歷結果。結果為:hidjkeblmfnogca

練習:(1)前序遍歷:gdafemhz

中序遍歷:adefghmz

求得後序遍歷結果為:aefdhzmg

(2)前序遍歷:adcefghb

中序遍歷:cdfeghab

求得後序遍歷結果為:cfhgedba

3、中序遍歷和後序遍歷還原二叉樹

思想如下:

a、根據後序遍歷結果,最後乙個元素為二叉樹的根結點;

b、觀察中序遍歷結果,其中根結點左側為左子樹,若左子樹根結點前(後)再無任何元素,則左(右)子樹的左分支為空;其中根結點右側為右子樹,若右子樹根結點前(後)再無任何元素,則左(右)子樹的左分支為空;

c、上面的過程是遞迴的。先根據後序遍歷結果找根結點,根結點左側為左子樹,右側為右子樹,再進入左子樹重複上面的過程,最後進入右子樹重複上面的過程,最終還原一棵樹。

例:已知

中序遍歷:hdibjekalfmcngo

後序遍歷:hidjkeblmfnogca

按照上述步驟先畫出二叉樹,然後在進行求解前序遍歷結果。結果為:

abdhiejkcflmgno

4、前序遍歷和後序遍歷還原二叉樹

已知前序和中序,後序和中序遍歷序列之後,可以唯一確定一棵二叉樹。但是,只知道前序和後序遍歷序列,是無法知道哪個結點是左子樹還算右子樹。

二叉樹的前序遍歷 中序遍歷和後序遍歷

include includeusing namespace std typedef struct bitnodebitnode,bitree void initbitree bitree t 構造空二叉樹 void createbitree bitree t 生成二叉樹 void preorder...

二叉樹的前序遍歷 中序遍歷 後序遍歷

二叉樹分為根節點 左子節點 右子節點,如下圖所示,前序遍歷的順序是 根左右 即 abc,中序遍歷的順序是 左根右 即 bac,後續遍歷的順序是 左右根 即 bca,給定乙個二叉樹,求三種遍歷方式的結果,以下圖為例 前序遍歷 根左右 a b d e f g c h k 中序遍歷 左根右 d b f e...

二叉樹的前序遍歷 中序遍歷 後序遍歷

樹的遍歷一般是從左至右,按照根結點在前中後的順序分為了前序遍歷,中序遍歷和後序遍歷 前序遍歷 根結點 左節點 右節點 中序遍歷 左節點 根結點 右節點 後序遍歷 左節點 右節點 根節點 下面寫了乙個遍歷的demo public class binarytree node current root n...