面試題33 二叉搜尋數的後續遍歷序列

2021-10-06 13:45:04 字數 1218 閱讀 5446

輸入乙個整肅陣列,判斷該陣列是不是某個二叉搜尋樹的後續遍歷結果。如果是則返回true,否則返回false。假如輸入的陣列中任意兩個數字都不相同.

思路:

1、二叉搜尋樹的特點:根節點的左子樹的所有節點的值都比根節點的值小,右子樹的所有節點的值都比根節點的值大;

2、後續遍歷的特點:左、右、根,所以遍歷結果的最後乙個節點一定是根節點,根據搜尋二叉樹的特點,遍歷結果的前半段一定比根節點的值小,後邊段一定比根節點的值大;

根據這個特點,可以通過遞迴的方式來判斷序列是否正確;

#include

using

namespace std;

//判斷是二叉搜尋樹的後續遍歷結果

bool

issequenceofbst

(int

*sequence,

int startindex,

int rootindex)

;int

main()

;bool issequence =

issequenceofbst

(squence,0,

6);if

(issequence)

else

return0;

}//判斷是二叉搜尋樹的後續遍歷結果

bool

issequenceofbst

(int

*sequence,

int startindex,

int rootindex)

int rootvalue = sequence[rootindex]

;int index = startindex;

//找出前半段,及對應左子樹節點

for(

; index < rootindex -

1; index++)}

//驗證後半段,及對應右子樹節點

int i = index;

for(

; i < rootindex -

1; i++)}

bool left =

true;if

(index >0)

bool right =

true;if

(index < rootindex)

return

(left && right)

;}

面試題33 二叉搜尋樹的後序遍歷序列

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相空間 思路 由於題目沒有給出二叉樹長什麼樣子,只給了乙個陣列,所以我們要從陣列中找到二叉搜尋樹後序序列的規律。後序序列的最後乙個元素是樹的根結點,因此...

劍指 面試題33 二叉搜尋樹的後序遍歷

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相同。思路 1 遞迴判斷左右子樹是不是二叉搜尋樹。2 輸入序列的最後乙個元素是二叉搜尋樹的根節點,前面的可分為左右子樹,其中左子樹小於根節點,右子樹大於...

面試題33 二叉搜尋樹的後序遍歷序列(基本沒思路)

一 題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。二 關鍵 1.遞迴思想。2.分組和分組依據 最後乙個是根節點 比根小的是左子樹,比根大的是右子樹 三 解釋 1.解題依據 在後序遍歷得到的序列中...