二叉搜索樹的後序遍歷
題目描述:
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。
如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
問題分析:
二叉搜索樹的特點:
根結點的左子樹都小於根結點,根結點的右子樹都大於根結點
思路:
1,根據特性找到根結點
2,從後往前找到第一個不大於根結點的索引,記錄下位置
3,以這個結點爲分割,進行遞歸
代碼展示:
function VerifySquenceOfBST(sequence)
{
// write code here 1 2 3 5 6 7 4
//二叉搜索樹,根據root大小可以判斷左右子樹
if(!sequence.length){
return false;
}
return adjust(sequence,0,sequence.length-1);
}
function adjust(sequence,start,end){
if(start >= end)
return true;
var i=end;
//從後往前找到root位置
while(i>start && sequence[i-1]>sequence[end]){
--i;
}
//判斷root之前的值是不是都小於root
for(var j=i-1;j>=start;--j){
if(sequence[j]>sequence[end]){
return false;
}
}
return adjust(sequence,start,i-1) && adjust(sequence,i,end-1)
}