【劍指offer】_09二叉搜索樹的后序遍歷序列

題目描述

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

解題思路

比如下面的這棵二叉搜索樹
在這里插入圖片描述
它的后序遍歷為0214369875;
我們設當前根節點為root;
第一次root=5
我們可以看出以3和6中間為分割線,左邊為5的左子樹,右邊為5的右子樹,數組最后一個數為5,為根結點。所以 {0,2,1,4,3}<root;{6,9,8,7}>root
size–1;
root = 7;
去掉5,最后一個數為7,它是以5為根結點的右子樹,那么它肯定大于以5為根節點的左子樹并且大于本身的左子樹
{0,2,1,4,3}<root;{6}<root;{9,8}>root;
size–1;
root = 8;
當數據規模再減1時,則走到了根結點的右子樹的右子樹,那么此時的root,它肯定大于以5為根節點的左子樹,和以7為根節點的左子樹,和自身的左子樹,小于自身的右子樹
那么size–1一直持續下去,數組最后一個根節點永遠都是上述的結論,就算到以5為根結點的左子樹中也成立,所以再這個持續的過程中,一旦出現與上述結論相悖的情況,就說明此數不是二叉搜索樹
如果最后size為0了,則說明此樹為二叉所搜樹。

class Solution {
public:bool VerifySquenceOfBST(vector<int> sequence) {int size = sequence.size(); //求出數組長度if(0==size)                //為0返回return false;int i = 0;//去掉總根結點后,數組最后一個元素就是右子樹的根結點,它的左子樹都比它小,右子樹都比它大//那么size再--,就到了右子樹的右子樹或者到左子樹,上述條件仍然成立while(--size){while(sequence[i++]<sequence[size]); //看左子樹的值是不是都小于根結點while(sequence[i++]>sequence[size]); //右子樹的值是不是都大于根結點if(i<size) //如果最后i還沒有和size相同,返回錯誤return false;i = 0;}return true;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383102.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【劍指offer】_10二叉樹和為某一路徑值

題目描述 輸入一顆二叉樹的跟節點和一個整數&#xff0c;打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思路 要求一路徑的和&#xff0c;那么必然終止條件為葉子結點&#xff0c;從根結點出發…

【劍指offer】_11整數中1出現的次數

題目描述 求出1~13的整數中1出現的次數,并算出100~1300的整數中1出現的次數&#xff1f;為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對于后面問題他就沒轍了。ACMer希望你們幫幫他,并把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的…

【劍指offer】_12 數組中的逆序對

題目描述 在數組中的兩個數字&#xff0c;如果前面一個數字大于后面的數字&#xff0c;則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。并將P對1000000007取模的結果輸出。 即輸出P%1000000007 解題思路 劍指offer的解法 看到這個題目&#xff0…

詳解Linux下通過yum安裝Mariadb/MySQL數據庫(騰訊云也適用)

1. 安裝Mariadb 安裝命令 yum -y install mariadb mariadb-server安裝完成MariaDB&#xff0c;首先啟動MariaDB systemctl start mariadb設置開機啟動 systemctl enable mariadbMariaDB的相關簡單配置 此命令進入到配置相關界面 mysql_secure_installation首先是設置密碼…

【劍指offer】_13 圓圈中最后的數

題目描述 年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為牛客的資深元老,自然也準備了一些小游戲。其中,有個游戲是這樣的:首先,讓小朋友們圍成一個大圈。然后,他隨機指定一個數m,讓編號為0的小朋友開始報數。每次喊到m-1的那個小朋友要出列唱…

【劍指offer】_14 不用加減乘除做加法

題目描述 寫一個函數&#xff0c;求兩個整數之和&#xff0c;要求在函數體內不得使用、-、*、/四則運算符號。 解題思路 首先看十進制是如何做的&#xff1a; 5712&#xff0c;三步走 第一步&#xff1a;相加各位的值&#xff0c;不算進位&#xff0c;得到2。 第二步&#x…

海量數據處理(位圖和布隆過濾器)

哈希切割 給一個超過100G大小的log file, log中存著IP地址, 設計算法找到出現次數最多的IP地址&#xff1f; 與上題條件相同&#xff0c;如何找到top K的IP&#xff1f;如何直接用Linux系統命令實現 解決思路 找到出現次數最多的IP地址 要找到前TopK的IP地址&#xff0c;就…

C++11新特性的總結

C11新特性 auto關鍵字(C11&#xff09;基于范圍的for循環(C11&#xff09;. 指針空值nullptr(C11&#xff09;C動態內存管理序列式容器 array forward_list;繼承和多態:final overridedelete:不生成默認的成員函數default:強制編譯器生成默認的成員函數智能指針:unique_ptr,sh…

詳解C++中右值引用

98中的引用 概念特性引用的使用場景三種傳參方式效率的比較探索:引用的底層實現方式----->指針 T&------>T* constconst T&---->const T*const 引用和指針的區別 引用的總結 11中的右值引用 為什么要有右值引用 為了提高程序運行效率&#xff0c;C11中引…

C++中的lambda表達式和線程庫

98中的一個例子 如果想要對一個數據集合中的元素進行排序&#xff0c;可以使用std::sort方法 #include <algorithm> #include <functional> int main() {int array[] {4,1,8,5,3,7,0,9,2,6};// 默認按照小于比較&#xff0c;排出來結果是升序std::sort(array, a…

文件壓縮(Huaffman樹的概念及其實現)

什么是壓縮 想辦法讓源文件變得更小并能還原。 為什么要進行文件壓縮 文件太大&#xff0c;節省空間提高數據再網絡上傳輸的效率對數據有保護作用—加密 文件壓縮的分類 無損壓縮 源文件被壓縮后&#xff0c;通過解壓縮能夠還原成和源文件完全相同的格式 有損壓縮 解壓縮之…

詳解STL中的空間配置器(SGI版本)

空間配置器 1.什么是空間配置器 為各個容器高效的管理空間(空間的申請與回收)的 2.為什么需要空間配置器 各種容器----->可以存放元素---->底層需要空間 new 申請空間 operator new ---->malloc調用構造函數------完成對象的構造 動態內存管理總結 前面的容器…

【劍指offer】_15數組中重復的數字

題目描述 在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的&#xff0c;但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如&#xff0c;如果輸入長度為7的數組{2,3,1,0,2,5,3}&#xff0c;那么對應的…

【劍指offer】_16 構建乘積數組

題目描述 給定一個數組A[0,1,…,n-1],請構建一個數組B[0,1,…,n-1],其中B中的元素B[i]A[0]*A[1]*...*A[i-1]*A[i1]*...*A[n-1]。不能使用除法。 解題思路 設有數組大小為5。 對于第一個for循環 第一步&#xff1a;b[0] 1; 第二步&#xff1a;b[1] b[0] * a[0] a[0] 第三…

【劍指offer】_17正則表達式的匹配

題目描述 請實現一個函數用來匹配包括’.‘和*的正則表達式。模式中的字符’.表示任意一個字符&#xff0c;而*表示它前面的字符可以出現任意次&#xff08;包含0次&#xff09;。 在本題中&#xff0c;匹配是指字符串的所有字符匹配整個模式。例如&#xff0c;字符串"aaa…

大四階段的社會實踐的主要目的是_疫情當前,大三大四的學生“很慘”?大一大二的學生也別松懈...

大四畢業生不容易這次疫情對于高校學生而言&#xff0c;可以說是各有各的難處&#xff0c;“這屆畢業生很慘”更是屢上熱搜。不可否認&#xff0c;大四畢業生確實很不容易&#xff0c;論文答辯、畢業、求職就業等都受到了影響&#xff0c;雖然有困難&#xff0c;但各方都在積極…

【劍指offer】_18 數據流中的中位數

題目描述 如何得到一個數據流中的中位數&#xff1f;如果從數據流中讀出奇數個數值&#xff0c;那么中位數就是所有數值排序之后位于中間的數值。如果從數據流中讀出偶數個數值&#xff0c;那么中位數就是所有數值排序之后中間兩個數的平均值。我們使用Insert()方法讀取數據流…

【劍指offer】_19 滑動窗口中的最大值

題目描述 給定一個數組和滑動窗口的大小&#xff0c;找出所有滑動窗口里數值的最大值。例如&#xff0c;如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3&#xff0c;那么一共存在6個滑動窗口&#xff0c;他們的最大值分別為{4,4,6,6,6,5}&#xff1b; 針對數組{2,3,4,2,6,2,…

android 文字反轉_多文字共享信息系統

歐陽貴林 www.HeZi.net首發表于2016年03月23日“ 處在信息時代的開端&#xff0c;信息技術不應有特殊的文字性&#xff0c;需要創建多文字共享信息系統&#xff0c;給各國文字一個公平的參與信息與科技創新發展的平臺。這是世界的事&#xff0c;更是中國事。”01人類語言語言文…

LeetCode【1--兩數之和】 LeetCode【2--兩數相加】

兩數之和 題目描述 給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那 兩個 整數&#xff0c;并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;你不能重復利用這個數組中同樣的元素。 解題思路 直接兩…