輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同
二叉搜尋樹的性質:根節點大於左子樹所有元素,小於右子數的所有元素。那麼後序遍歷的話,最後乙個元素就為根節點root。那麼本題的思路如下:
找到陣列中左右子樹的分界點,並判斷右子樹是否全大於根節點,若不是則直接返回false;
之後遞迴判斷左右子樹是否都為二叉搜尋樹,注意左子樹或右子樹不存在的情況;
左右子樹都為二叉搜尋樹返回true,左右子樹有乙個不為二叉搜尋樹則返回false;
#include
#include
using
namespace std;
class
solution
bool
veriftbst
(vector<
int> sequence ,
int start,
int end)
int root = sequence[end]
;//找到左右子樹的分界點
int index = start;
for(index = start ; index < end ; index++)}
//index為右子樹的第乙個元素下標
for(
int i = index ; i < end ; i++)}
bool left =
true;if
(index > start)
bool right =
true;if
(end-
1> index)
return left && right;}}
;int
main()
solution s;
cout
(array);}
return0;
}
劍指offer 23 二叉搜尋樹的後續遍歷
程式設計資料獲取 codelab 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。我們先來了解一下什麼是二叉搜尋樹 二叉查詢樹 binarysearchtree 也稱為二叉搜尋樹 有序二叉樹或排序二叉樹是指一棵...
劍指offer 23二叉搜尋樹的後序遍歷序列
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。分析 後續遍歷要求左子樹大於根大於右子樹,陣列最後乙個元素為根。陣列前半段小於最後乙個元素,為左子樹 後半段大於最後乙個元素,為右子樹,否則返回fals...
劍指Offer(23) 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。後序遍歷序列最後乙個元素為根節點,前面元素中小於根節點值的為左子樹,大於根節點值的為右子樹,再在左子樹中找到最後乙個元素為左子樹的根節點,繼續分成左右子樹,使用遞...