最近有同學考計算機二級不懂樹遍歷的計算,就找上我解惑。作爲老好人的博主的我,但是義不容辭的上來闡述了一番。
先來官方的概念:
樹的遍歷:是指對樹中所有結點信息的訪問,即依次對樹中每個結點的訪問一次且僅訪問一次。
分爲:先序遍歷,後序遍歷,層次遍歷。(普通的樹是沒有中序遍歷的)
這裏我們說一下二叉樹的遍歷:
二叉樹的遍歷分成三種,按照根節點的訪問先後分爲:
先序遍歷(先根遍歷):先訪問根節點
,然後訪問左子樹, 最後訪問右子樹。
中序遍歷(中根遍歷):先訪問左子樹,然後訪問根節點
, 最後訪問右子樹。
後續遍歷(後根遍歷):先訪問左子樹,然後訪問右子樹, 最後訪問根節點
。
如:
先序遍歷的順序:ABC (先根節點A,在左子樹B,然後右子樹C);
中序遍歷的順序:BAC (先左子樹B,在根節點A,然後右子樹C);
後序遍歷的順序:BCA (先左子樹B,在右子樹C,然後根節點A)。
上圖二叉樹遍歷結果:
先序遍歷:ABDFCEGHI
中序遍歷:BFDACHGIE
後序遍歷:FDBHIGECA
第一種分析方法:(此處分析先序遍歷)
①:從A根節點開始,根據先序遍歷的原則:首先訪問根節點A,然後訪問它的左子樹B, 在訪問右子樹C,遍歷順序就是A->B->C
②:左子樹B 也按照先序遍歷的原則來處理, 遍歷順序就是B->D。B的右子樹也按照先序遍歷的原則,順序是D->F
,就可以得到A->B->D->F->C
③:右子樹C按照先序遍歷的原則處理,順序是C->E,同理C的子樹得遍歷順序E->G->H->I
那麼, 這棵樹先序遍歷的結果就是,A->B->D->F->C->E->G->H->I
這是遞歸思路,根據原則遍歷子樹,子樹沒了子節點遍歷完,則遍歷同深度。
第二種分析方法:(此處分析中序遍歷)
推導計算,兩種遍歷序列算出第三種序列。
記住兩點:
先序,後序遍歷可以確定根節點。
中序遍歷可以確定左子樹和右子樹。
做這種題就是,反覆來回這兩點
題目分析:
由前序遍歷知道,A是根節點。
則根據中序遍歷 知道HBDF是左子樹 EKCG是右子樹的
然後在根據前序遍歷 BHFD 知道B是左子樹的根節點 ,再根據中序遍歷知道H是左子樹,DF是右子樹,同理F是根,D是左子樹。
由此也可推出A的右子樹的結構
所有整個樹的結構是:
因此後序遍歷是:
HDFBKGCEA
答案是B