1. 程式人生 > >【劍指offer】二叉搜索樹的後序遍歷序列

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

image 最大 樹的定義 結果 註意事項 ron com 題目 序列

一、題目:

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

二、思路:

1.搜索二叉樹的定義:一棵樹的左子樹的值都比根節點的值小,右子樹的值都比根節點的值大,空子樹不算搜索二叉樹。(百度上說算,這道題說不算)

2.思路分析:輸入的是序列,那麽序列的最後一個元素是根節點,我們要判斷他的左右子樹是否滿足條件,第一步要找出左右子樹,第二步判斷左右子樹是否滿足與根節點值的關系,第三步判斷左右子樹是否是搜索二叉樹。第一步的方法是,找出第一個>根的值,以此為分界線,左邊是左子樹,右邊是右子樹,註意左右子樹可能沒有。第二步的方法是左子樹的最大值(最大值滿足說明全部都滿足)是否小於根的值且右子樹的最小值是否大於根的值。第三步的方法是遞歸調用左右子樹。

3.註意事項:根彈出以後,要註意是否已經沒有值了,如果沒有值了就返回是;找左右子樹的分界線時,要註意沒有左右子樹的情況,以及只有一個元素時能不能找準的情況。

三、代碼:

技術分享圖片

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