二叉搜索樹的后序遍歷序列

輸入一個(gè)整數(shù)數(shù)組蚀狰,判斷該數(shù)組是不是某二叉搜索樹的后序遍歷的結(jié)果。如果是則輸出Yes,否則輸出No职员。假設(shè)輸入的數(shù)組的任意兩個(gè)數(shù)字都互不相同麻蹋。


一個(gè)二叉樹結(jié)構(gòu)是不能僅僅根據(jù)后續(xù)遍歷確定的,但是題目中的二叉樹是二叉搜索樹焊切,二叉搜索樹的性質(zhì)是節(jié)點(diǎn)左子樹的值一定小于根節(jié)點(diǎn)扮授,右子樹的值一定都大于根節(jié)點(diǎn),后續(xù)遍歷的順序是先左然后右最后根節(jié)點(diǎn)专肪,所以序列的最后一個(gè)元素一定是根節(jié)點(diǎn)刹勃。曾想過既然最后一個(gè)元素是根節(jié)點(diǎn),自己能不能根據(jù)二叉搜索樹的性質(zhì)和給定的序列能否構(gòu)建出一個(gè)搜索樹呢嚎尤。比如給定測試序列[4,8,6,12,16,14,10]荔仁,其中10是根節(jié)點(diǎn),14大于10所以14應(yīng)該在10的右子樹芽死,16大于14乏梁,16位于14的右子樹,12大于10小于14所以位于14的左子樹...... 就這樣構(gòu)建关贵,完成后然后在進(jìn)行一次后序遍歷然后和給定的序列進(jìn)行比較是否一致遇骑。但是這樣實(shí)在太麻煩了。而且題目中沒有給定樹的結(jié)構(gòu)揖曾,說明題目不需要進(jìn)行先構(gòu)建二叉搜索樹然后進(jìn)行后序遍歷再比較序列的一致性來求解落萎。所以還是考慮二叉搜索樹的性質(zhì)和樹的遞歸結(jié)構(gòu),二叉搜索樹的節(jié)點(diǎn)除了大小性質(zhì)外炭剪,每個(gè)子樹同樣是二叉搜索樹练链。所以完全可以遞歸求解。求解思路:如果給定的序列符合奴拦,根據(jù)后續(xù)的遍歷一定可以找到根節(jié)點(diǎn)的左子樹的遍歷序列和右子書的遍歷序列兑宇。左邊的都一定比根節(jié)點(diǎn)小,右邊的都比根節(jié)點(diǎn)大,有一個(gè)不符合就返回false隶糕。如果符合就遞歸的求解左序列和右序列瓷产。如果每次遞歸都符合說明給定序列符合條件。其中遇到的一個(gè)問題是如果序列為空應(yīng)該怎么判斷枚驻,因?yàn)橐粋€(gè)二叉搜索樹僅僅有左子樹或者右子樹是可能的濒旦,所以我之前判斷如果序列元素的數(shù)量小于等于1應(yīng)該返回true。但是如果第一次輸入給函數(shù)的時(shí)候就是空序列再登,顯然是不應(yīng)該返回true的尔邓。所以如果序列為空返回false,后面進(jìn)行遞歸之前如果子序列為空就不遞歸來實(shí)現(xiàn)锉矢。

function VerifySquenceOfBST($sequence)
{
        // write code here
    $flag = true;
    if(count($sequence)==0){
        return false;
    }
    if(count($sequence)==1){
        return true;
    }
    else{
        $root_val = end($sequence);
        $less_max_idx = -1 ;
        $left = array();
        $right = array();
        for($i = 0;$i < count($sequence);$i++){
            if($sequence[$i]<$root_val){
                $less_max_idx = $i;
            }
        }
        for($i = 0;$i<count($sequence)-1;$i++){
            if($i<=$less_max_idx){
              $left[] = $sequence[$i];
            }else{
               $right[] = $sequence[$i]; 
            }
        }
        //驗(yàn)證左子樹,必須都比根節(jié)點(diǎn)小
        for($i =0;$i<count($left);$i++){
            if($left[$i] > $root_val){
                return false;
            }
        }
        for($i = 0; $i<count($right); $i++){
            if($right[$i] < $root_val){
                return false;
            }
        }
        if(count($left)>0){
           $flag &= VerifySquenceOfBST($left);
        }
        if($flag&&count($right)>0){ 
            $flag &= VerifySquenceOfBST($right);
        }
        return $flag;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梯嗽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沽损,更是在濱河造成了極大的恐慌灯节,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绵估,死亡現(xiàn)場離奇詭異炎疆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)国裳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門形入,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缝左,你說我怎么就攤上這事亿遂。” “怎么了渺杉?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵崩掘,是天一觀的道長。 經(jīng)常有香客問我少办,道長苞慢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任英妓,我火速辦了婚禮挽放,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔓纠。我一直安慰自己辑畦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布腿倚。 她就那樣靜靜地躺著纯出,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暂筝,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天箩言,我揣著相機(jī)與錄音,去河邊找鬼焕襟。 笑死陨收,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸵赖。 我是一名探鬼主播务漩,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼它褪!你這毒婦竟也來了饵骨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茫打,失蹤者是張志新(化名)和其女友劉穎居触,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體包吝,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年源葫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诗越。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡息堂,死狀恐怖嚷狞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荣堰,我是刑警寧澤床未,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站振坚,受9級特大地震影響薇搁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渡八,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一啃洋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屎鳍,春花似錦宏娄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春卖宠,著一層夾襖步出監(jiān)牢的瞬間巍杈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工逗堵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秉氧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓蜒秤,卻偏偏與公主長得像汁咏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子作媚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容