題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
題目分析
線索二叉樹的特徵:左子樹小於根節點,右子樹大於根節點。
後序遍歷:左子樹、右子樹、根節點。
解題思路:
1、找到根節點所在索引位置,區分左右子樹。
2、判斷索引後的元素是否都大於更節點。
3、分別遞歸判斷左右子樹。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int i_length = sequence.size();
if(i_length <= 0)
return false;
return fun(sequence,0,i_length-1);
}
bool fun(vector<int> sequence,int begin,int end)
{
if(end - begin <= 1)
return true;
else
{
int i_current = begin;
while(sequence[i_current] < sequence[end] && i_current < end)
{
i_current++;
}
for(int i = i_current;i<=end;i++)
{
if(sequence[i] < sequence[end])
return false;
}
return fun(sequence,begin,i_current-1)&&fun(sequence,i_current,end-1);
}
}
};