劍指offer-js 二叉搜索樹的後序遍歷

二叉搜索樹的後序遍歷

題目描述:

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。
如果是則輸出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)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章