遍歷序列確定二叉樹:
乙個遍歷序列不可能確定唯一的乙個二叉樹。
已知同乙個二叉樹的先序和中序遍歷序列,能確定嗎?
主要看中序遍歷序列劃分左右子樹,一直分下去。
先序: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
中序:
d
be
acgfh由於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 列出了兩種遍歷序列組合確定二叉樹的情況。例已...