輸入乙個整肅陣列,判斷該陣列是不是某個二叉搜尋樹的後續遍歷結果。如果是則返回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.解題依據 在後序遍歷得到的序列中...