根據樹遍歷序列求解樹結構

2021-07-05 04:22:46 字數 1436 閱讀 4357

華電北風吹

日期:2015/9/8

本文從二叉樹的三種遍歷方式中選擇兩種遍歷方式,討論怎麼還原出二叉樹的完整結構。

樹遍歷基礎知識:

1) 前序遍歷:根節點+左子樹+右子樹

2) 中序遍歷:左子樹+根節點+右子樹

3) 後序遍歷:左子樹+右子樹+根節點

一、已知前序遍歷和中序遍歷

已知一棵二叉樹前序遍歷和中序遍歷分別為abdegcfh和dbgeachf

( 解題思路:回看一下式1和式2。可以看出前序遍歷的第乙個元素就是這個子樹的根節點,然後就可以結合中序遍歷劃分左右子樹,進而對左右子樹的前序遍歷和中序遍歷遞迴求解子樹樹根,直至子樹為空。

例題解釋:有前序序列可以知道根節點為a,由中序序列可以知道a的左子樹中序遍歷為dbge,由前序序列可以知道a的左子樹前序序列為bdeg。接下來可以得到a右子樹前序序列為cfh,中序遍歷為chf。接下來遞迴求解即可。

二、已知後序遍歷和中序遍歷

已知某二叉樹的後序遍歷序列是dabec,中序遍歷序列是debac

解題思路:回看一下式2和式3。後序遍歷的根節點在最後乙個元素,因此可以根據根節點結合中序遍歷,將找出根節點的左子樹、右子樹。進而遞迴需找子樹根節點,直至子樹為空。

例題解釋:根據後序遍歷可知根節點為c,結合中序遍歷c左子樹中序遍歷為deba,前序遍歷為dabe,右子樹為空。接下來對左子樹遞迴求解即可。

三、已知前序遍歷和後序遍歷

這種方式是無法確切還原出樹的結構的。

回看一下式2和式3。兩種遍歷方式都可以獲得根節點,但是沒有任何資訊可以直接對(左子樹+右子樹)構成的序列進行左右子樹劃分。可以利用的資訊是子樹的前序遍歷第乙個節點是後序遍歷的最後乙個節點,這樣能夠找到子樹,但是當某個節點只有乙個子樹的時候,無法判斷是左子樹還是右子樹。

以第乙個例子為例解釋:

二叉樹前序遍歷為abdegcfh,後序序列為dgebhfca

可以確定第乙個根節點是a,a第乙個子樹根節點是b,根節點為b的子樹後序遍歷為dgeb,前序遍歷為bdeg,a第二個子樹根節點為c,他的後序遍歷為hfc,前序遍歷為cfh,然後一次遞迴。簡單起見,我們只看a第二個子樹,即右子樹c。c的第乙個根節點f,子樹f的後序遍歷hf,前序遍歷fh,c沒有第二個子樹,這時不管f為左子樹還是右子樹都是滿足要求的。同理f的子樹h。

圖中只有乙個子樹的用兩條線連線,表示這是左右子樹均可。

總結,在由兩種遍歷方式求樹結構的時候,關鍵是先找到根節點,然後對左右子樹遞迴求解。

樹結構 Trie字典樹

trie樹的名字有很多,比如字典樹,字首樹等等。第一 根節點不包含字元,除根節點外的每乙個子節點都包含乙個字元。第二 從根節點到某一節點,路徑上經過的字元連線起來,就是該節點對應的字串。第三 每個單詞的公共字首作為乙個字元節點儲存。1 詞頻統計 可能有人要說了,詞頻統計簡單啊,乙個hash或者乙個堆...

根據遍歷序列確定二叉樹

1.在先序序列中,第乙個結點一定是二叉樹的根結點 2.在中序序列中,根結點必然將中序序列分割成兩個子串行 前乙個子串行是根結點的左子樹的中序序列,後乙個是右子樹的 3.根據這兩個子串行,在先序序列中找到對應的左右子串行 4.在先序序列中,左子串行的第乙個結點是左子樹的根結點,右子串行同理 5.如此遞...

根據前序遍歷序列和中序遍歷序列重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。程式設計思路 1.先求出根節點 前序序列第乙個元素 2.將根節點帶入到中序遍歷序列中求出左右子樹的中序遍歷序列。3.通過左...