判斷一個後序遍曆是否正確

來源:互聯網
上載者:User

題目:

一棵二叉尋找樹,得到一個後序遍曆,判斷這個後序遍曆是否正確。

分析:

方法1,根據中序和後序

根據中序和後序,可以唯一得到一棵二叉樹。一棵二叉尋找樹的中序顯然就是所有數位正常排序,所以,我們首先將所有的後序得到的數字排序,時間複雜度是O(nlogn),然後根據後序和中序遍曆,判斷二叉樹是否可以建立。

總的時間複雜度就是O(nlogn)。

方法2,直接利用尋找二叉樹的性質

顯然,後序遍曆的最後一個數字是根節點,然後根據尋找二叉樹的性質,我們將前面的數字分為兩部分,前面一部分都是小於根節點的數字,後面的數字都是大於根節點的數字。然後用遞迴的方法,判斷是否是正確的尋找二叉樹後序遍曆。

代碼如下:

#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;bool verifyBST(int *a, int len){if(a == NULL || len < 0)return false;if(len == 0)//如果長度為0,返回正確return true;int i = 0;while(i < len - 1)//找到第一個大於根節點的數字{if(a[i] > a[len - 1])break;i++;}int j = i;while(j < len - 1)//判斷右邊部分的數字是否都大於根節點{if(a[j] < a[len - 1])return false;j++;}return verifyBST(a, i) && verifyBST(a + i, len - i - 1);//遞迴調用,判斷左邊和右邊數字是否滿足條件}int main(){int a[] = {1,2,4,5,6,3};cout << verifyBST(a, sizeof(a)/sizeof(a[0])) <<endl;return 0;}

總結:

面試中會經常出現二叉樹方面的題目,這種題目,要學會挖掘二叉樹中的特徵,學會用特徵進行解題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.