給出先序和中序序列,還原二叉樹的規律方法

2021-07-15 22:36:56 字數 1108 閱讀 2575

已知先序序列:a b c d e f g h i

中序序列;b c a e d g h f i

還原二叉樹的結構。

首先,我們要根據先序序列和中序序列的特點:先序序列是先訪問節點的值,然後是左孩子,其次是右孩子;而中序序列是先訪問左孩子,再訪問節點的值,再訪問右孩子。

根據這個規律,首先看先序序列的a,得到這個a便是根節點,我們再中序序列中找到a,在a的左側的序列便是左子樹,a的右邊部分是右子樹,這取決於它的訪問順序。即左子樹由bc構成,右子樹由defghi構成。

而樹的遍歷是一層一層遞迴的,那麼還原也一樣。我們根據左子樹(右子樹)的根重複上面的操作便可以得到最終的二叉樹。

首先看左子樹,先序序列接著訪問b,在中序序列裡找到b,由於中序序列是先訪問左孩子,再訪問節點的值,再訪問右孩子,則b的左右則代表著它的左右子樹。我們看到中序序列裡b的左邊

沒有值,右邊有個c,所以我們可以得出下面的結構:

a/ \b\

c這樣我們的左子樹就完了,我們再看右子樹:

根據先序序列,右子樹是defghi,首先訪問d,我們在中序序列裡找到d,它的左邊有e(不包含已經訪問過的),右邊有ghfi,即d節點的左子樹為e,右子樹為ghfi。則可得到下面的結構:

a/        \

b          d

\           /    \

c       e

由於d的左子樹只有乙個節點e,所以e沒有左右子樹。

繼續訪問先序序列裡的f,找到中序序列裡的f,左子樹為gh,右子樹為i,則可以得到下面的結構:

a/         \

b            d

\           /    \ 

c       e       f

/    \

i然後根據先序序列再找g,在中序序列中我們可以看到g有右子樹h,這樣我們就完成了所有的遍歷,得到了最終的二叉樹結構:

a/         \

b            d

\           /    \ 

c       e       f

/    \

g     i\h

跟著上面的步驟,自己走一遍應該就能掌握方法了,僅供學習交流。

Java由先序序列和中序序列還原二叉樹

還原本來的二叉樹並不是乙個非常簡單的事,雖然思想比較簡單,但過程卻是比較繁瑣。下面我拿先序序列和中序序列來講一下原理吧。從先序序列中我們一下子就可以得到二叉樹的根節點是第乙個元素,然後再中序序列中我們也可以找到這個元素 假設二叉樹中所有的元素的值不相同 這樣我們就可以把中序序列分成兩部分,前部分和先...

二叉樹 先序序列 中序序列 後序序列

已知二叉樹的先序遍歷序列和中序遍歷序列,求後序遍歷序列。先遞迴構造二叉樹,然後遞迴得到後序序列。思路 先序序列的第乙個結點為要構造二叉樹的根結點,在中序序列中查詢二叉樹的根結點,則中序列根結點左邊為根結點的左子樹的中序序列,右邊為根結點的右子樹的中序序列。而先序序列根結點後面分別為它的左子樹和右子樹...

還原二叉樹 已知先序中序或者後序中序

首先,我們看看前序 中序 後序遍歷的特性 前序遍歷 1.訪問根節點 2.前序遍歷左子樹 3.前序遍歷右子樹 個人覺得這個命名略微有誤導性,因為前序的 前 容易讓人誤會成樹的最前邊 視覺上的左邊 記住前序遍歷就是最直接 直覺上的 遍歷 中左右 中序遍歷 1.中序遍歷左子樹 2.訪問根節點 3.中序遍歷...