C語言強化(八)判斷序列是不是二叉尋找樹的後序遍曆結果

來源:互聯網
上載者:User

標籤:二叉樹   二叉尋找樹   後序遍曆   資料結構   演算法   

前面聊了一系列關於鏈表相交的問題,本篇博文,讓我們通過一道簡單的判斷題,複習複習數組和二叉樹。


通過這道題,你可以掌握

  • 二叉尋找樹的規律
  • 後序遍曆的特點
  • 遞迴的使用
題目輸入一個整數數組,判斷該數組是不是某二元尋找樹的後序遍曆的結果。
如果是返回 true,否則返回 false。

例如輸入 5、7、6、9、11、10、8,由於這一整數序列是如下樹的後序遍曆結果:

因此返回 true。
如果輸入 7、4、6、5,沒有哪棵樹的後序遍曆的結果是這個序列,因此返回 false。


看到二元尋找樹(or二叉尋找樹),第一反應, 比根結點大的數在右邊,比根結點小的數在左邊接著看到後序尋找,第一反應, 最後遍曆到的數是根結點做到這兩點,此題就沒什麼難度了,就當過個編程癮。當然在一些難度較大的題目,光是發現這兩個規律是不夠的。
思路因為是後續遍曆,那麼最後遍曆到的數是根結點。
又因為是二叉尋找樹,所以比根結點大的數在右邊,比根結點小的數在左邊,
左邊的數遍曆比右邊的較快被遍曆到!
所以必須滿足 比根結點大的數中最小角標 比 比根結點小的數中最大角標 要大
對左右子數組同樣使用上面的思路進行遞迴判斷!
如果數組的長度小於等於3,則不需判斷,肯定滿足

原始碼
#include <stdio.h>#include<stdlib.h>#include <iostream>#include<sstream>#include <vector>using namespace std;/**題目:輸入一個整數數組,判斷該數組是不是某二元尋找樹的後序遍曆的結果。如果是返回 true,否則返回 false。思路如果是後續遍曆,那麼最後遍曆到的數是根結點。又因為是二叉尋找樹,所以比根結點大的數在右邊,比根結點小的數在左邊,左邊的數遍曆比右邊的較快被遍曆到!所以必須滿足比根結點大的數中最小角標 比 比根結點小的數中最大角標 要大!對子數組同樣使用上面的思路進行遞迴判斷!如果子數組的長度小於等於3,則不需判斷,肯定滿足*//**ifBTreeHouXuvt  給一個vector數組,判斷是否是後序遍曆結果*/bool ifBTreeHouXu(vector<int> vt){if(vt.size()<=0||NULL== &vt)return false;if(vt.size()>3){//如果子數組的長度小於等於3,則不需判斷,肯定滿足int root = vt[vt.size()-1];//擷取根結點值bool flag = true;vt.pop_back();//剔除根結點vector<int> vt_small;//小於根結點的數組vector<int> vt_big;//大於根結點的數組//遍曆for(int i = 0;i<vt.size();i++){//如果遍曆到一個數比根結點大,則把flag置為false//下面如果再遍曆到一個數比根結點小,則說明該數組不是後序遍曆結果if(flag&&vt[i]>root)flag=false;else if(flag&&vt[i]<root)vt_small.push_back(vt[i]);else if(!flag&&vt[i]>root)vt_big.push_back(vt[i]);elsereturn false;//此數組不是後序遍曆結果}return ifBTreeHouXu(vt_small)&&ifBTreeHouXu(vt_big);}return true;}vector<int> vt_test;void initTure(){vt_test.push_back(5);vt_test.push_back(7);vt_test.push_back(6);vt_test.push_back(9);vt_test.push_back(11);vt_test.push_back(10);vt_test.push_back(8);}void initFalse(){vt_test.push_back(7);vt_test.push_back(4);vt_test.push_back(6);vt_test.push_back(5);}void main(){initTure();//initFalse();if(ifBTreeHouXu(vt_test))cout<<"是後序遍曆結果"<<endl;elsecout<<"【不】是後序遍曆結果"<<endl;system("pause");}

運行圖

總結:二元尋找樹,第一反應,比根結點大的數在右邊,比根結點小的數在左邊後序尋找,第一反應,最後遍曆到的數是根結點

C語言強化(八)判斷序列是不是二叉尋找樹的後序遍曆結果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.