牛客 二叉搜尋樹的後序遍歷序列

2021-09-11 07:16:29 字數 1283 閱讀 7093

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。假設輸入的陣列的任意兩個數字都互不相同。

二叉搜尋樹或者是一棵空樹,或者是具有下列性質的二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;

(4)沒有鍵值相等的節點

採用分治法的思想,找到根結點、左子樹的序列、右子樹的序列,分別判斷左右子串行是否為二叉樹的後序序列。

由題意可得:

1. 後序遍歷序列的最後乙個元素為二叉樹的根節點;

2. 二叉搜尋樹左子樹上所有的結點均小於根結點、右子樹所有的結點均大於根結點。

演算法步驟如下:

1. 找到根結點;

2. 遍歷序列,找到第乙個大於等於根結點的元素i,則i左側為左子樹、i右側為右子樹;

3. 我們已經知道i左側所有元素均小於根結點,那麼再依次遍歷右側,看是否所有元素均大於根結點;若出現小於根結點的元素,則直接返回false;若右側全都大於根結點,則:

4. 分別遞迴判斷左/右子串行是否為後序序列;

其中在判斷start<=end的時候是都需要判斷

1️⃣取到start==end時說明剩下的元素為1個,肯定是符合後序遍歷,就直接返回true

2️⃣須判斷start>end的情況,這種情況是沒有左子樹,只有根節點和乙個右節點(只有兩個元素)的情況,此時再遞迴左子樹的時候,此時傳入的end=start-1,此時的因為之前已經判斷了右子樹符合條件,此時就直接返回true

public class solution 

//當為只有乙個元素的時候直接返回true

//if(sequence.length==1)

return verifysquenceofbst(sequence,0,sequence.length-1);

}public boolean verifysquenceofbst(int sequence,int start,int end )

//取到end處的元素,該元素為根節點

int root= sequence[end];

int i=0;

//從左向右開始找到第乙個比根節點的元素大的位置i,在i的左邊即為根節點的左子樹(因為題目中給成輸入陣列互不相同)

牛客網 二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。public class solution else if sequence.length 1 return verifysequenceofbst sequen...

牛客網 24 二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同 package leetcode public class l23sequenceofbst private boolean verifysquenceofbst...

二叉搜尋樹的後序遍歷序列

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。解答 二叉搜尋樹後序遍歷最後訪問的是根節點,根據根節點將陣列分成兩部分,前面一部分即左子樹值小於根節點值,後面一部分即右子樹的值大於根節點 再遞迴的檢查...