各種遍歷序列確定二叉樹分析與總結

2021-10-05 23:54:37 字數 2627 閱讀 9482

遍歷序列確定二叉樹:

乙個遍歷序列不可能確定唯一的乙個二叉樹。

已知同乙個二叉樹的先序和中序遍歷序列,能確定嗎?

主要看中序遍歷序列劃分左右子樹,一直分下去。

先序:abdecfgh(根左右)

中序:dbeacgfh(左根右)

先序看到a,a在中序的中間,所以a既有左子樹又有右子樹。

a的左子樹為dbe,a的右子樹為cgfh

對dbe分析:

先序bde,中序dbe,

先序看到b,b在中序中間,所有b既有左子樹又有右子樹。

所以b的左孩子是d,b的右孩子是e。

對cgfh分析:

先序cfgh,後序cgfh

先序看到c,中序看到c在最左邊,所以c沒有左孩子。

根左 右 ->根右左 根右 ->根右這種判斷方式是我個人這麼在幹,

根不能刪掉,當我們刪掉了之後,發現先序和後序都是根右結構,推出沒有左孩子

若先序為 cfgh,後序為ghfc

根左右 ->根左

左根右 ->左根

我們把fgh看成乙個整體,發現我們刪掉,發現前序是根左,後序是左根符合題意,推出沒有右孩子。

**:這的i是我們通過for迴圈來得到的下標i的值

確定左邊一半:

確定右邊一半:

思路分析:

1.後序序列的最後乙個是(這個是突破口)

2.然後再根據中序序列劃分左右子樹

這個序列的難點是:

後序:ghfc

中序:cgfh

用我們前面提到的方法:

(根不刪)

左 右根

左 根右

我們發現把刪除後,恰好是上面的結構,推出c沒有右孩子。

(不是正規解法,只是我這麼在寫)

中序:左根右

層次看到a,a是二叉樹的根。看到a在中序的中間,dbe,cgfh分別是a的左右子樹。

然後根據層次遍歷推出,既然a有左右子樹,那麼b一定是a的左孩子,c一定是a的右孩子。

層次:abc

defgh

中序:dbeacgfh

由於b在de中間,把de再劃掉。

我們分析c的左邊是a,(中序遍歷結構是左根右)我們發現a的左邊是a的父結點,推出a沒有左孩子。

層次還剩下fgh,把c看作根結點,由於gfh在中序遍歷c的右邊,所以gfh全部屬於c的子樹。

然後就剩下3個結點,可以輕鬆推出來了。

int

search

(char arr,

char key,

int l,

int r)

return-1

;}void

getsublevel

(char sublevel,

char level,

char in,

int n,

int l,

int r)

//在level處理的資料範圍不是連續的

btnode *

createbt3

(char level,

char in,

int n,

int l,

int r)

先序:根左右

後序:左右根

只能確定根,不能確定左右子樹。

根據遍歷序列確定二叉樹

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

校招必考 根據二叉樹遍歷序列確定二叉樹

這道題本質上是要我們根據二叉樹遍歷序列確定二叉樹,只要二叉樹確定了,求它的任何遍歷序列都是易如反掌的。理論基礎 由二叉樹的先序遍歷序列 preordertr erse 和中序遍歷序列 inordertr erse 或由其後序遍歷序列 postordertr erse 和中序遍歷序列均能唯一地確定一棵...

6 7由遍歷序列確定的二叉樹

在二叉樹的遍歷中,我們知道,給定一棵二叉樹和一種遍歷方法,就可以確定該二叉樹相應的線性序列。那麼,根據給定的遍歷序列能否唯一的確定一棵二叉樹呢?顯然,只由一種序列是無法確定二叉樹的,要根據遍歷序列確定二叉樹,至少需要知道該二叉樹的兩種遍歷序列。表 6 1 列出了兩種遍歷序列組合確定二叉樹的情況。例已...