題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false.假設輸入的陣列任一兩個陣列都不相同。
首先這個陣列是搜尋二叉樹的後序遍歷,因為搜尋二叉樹滿足左小右大的規則,並且後序遍歷中最後乙個遍歷的是根節點,因此,我們能根據最後乙個數字將陣列分為兩部分,前面的一部分都比最後乙個節點小,後面的一部分都比最後乙個節點大。
因此,整體思路是這樣的:將最後乙個數字作為根節點提出來,從頭開始和這個數字進行比較,當遇到第乙個比根節點大的數字的時候跳出並記錄下位置,假設這個位置為i,陣列的長度為length,那麼0到i-1都是左子樹,i到length-1都是右子樹,再找到i以後,我們從i處繼續往後遍歷,如果遇到比根節點小的樹,那麼這個樹就不是二叉搜尋樹。遞迴的進行判斷即可。
class solution
bool verfy(vectorsequence,int start,int end)
};
劍指Offer刷題筆記 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。首先確定二叉搜尋樹的定義 二叉查詢樹 binary search tree 它或者是一棵空樹,或者是具有下列性質的二叉樹 1.若它的左子樹不空,則左子樹上所有結點...
劍指Offer 刷題 重建二叉樹
definition for binary tree public class treenode public class solution int val pre prel 前序遍歷序列中的第乙個數即為根節點 treenode tree newtreenode val int mid 0 找到根節...
劍指Offer刷題筆記 二叉樹的映象
操作給定的二叉樹,將其變換為源二叉樹的映象。思路 遞迴的交換左右子樹。不是交換結點的數值,直接交換結點。coding utf 8 class treenode def init self,x self.val x self.left none self.right none class soluti...