劍指offer 二叉搜尋樹的後序遍歷序列

2021-08-31 04:02:32 字數 1187 閱讀 9237

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

知識點:

1.二叉搜尋樹:

二叉查詢樹(binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,

或者是具有下列性質的二叉樹:

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

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

它的左、右子樹也分別為二叉排序樹。

2.二叉樹的後序遍歷

後序遍歷的順序:左右根

思路:思路:

後序遍歷得到的序列中,最後乙個數字是樹的根節點的值,陣列前面的數字可以分為兩部分,

第一部分是左子樹節點的值,它們都比根節點小;第二部分是右子樹節點的值,它們都比根節點的值大。

**:

public class solution 

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

}private boolean verify(int sequence,int start,int end)

int root=sequence[end];

int i=start;

while(sequence[i]另外一種實現是參考這篇博文:實現的,雖然在牛客網上提交成功了,但是在我debug的過程中,右子樹遞迴一直不判斷,到現在也沒找到問題ε=(´ο`*)))唉。

貼一下**,熟一點了再來看看吧!

實現2:

public class solution else

}private boolean verifysquenceofbst(int sequence, int length)

int root=sequence[length-1];

int i=0;

//在二叉搜尋樹中,左子樹的節點小於根節點

for(;iroot)

}int j=i;

//在二叉搜尋樹中,右子樹的節點都大於根節點

for(;j0)

//判斷右子樹是不是二叉搜尋樹

boolean rightisbst=true;

if(j

return leftisbst&&rightisbst;}}

劍指Offer 二叉搜尋樹的後序遍歷

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。author zy date 2017年10月13日 下午9 34 21 decription 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如...

劍指offer 二叉搜尋樹的後序遍歷

時間限制 1秒 空間限制 32768k 熱度指數 524747 本題知識點 棧 樹輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。這兩天狀態不行,沒多大刷題的動力。菜還不想動,說的大概就是我了。遞迴 大佬的思路...

劍指offer 二叉搜尋樹的後序遍歷

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。簡單思路 二叉搜尋樹 1.左孩子 根 右孩子 2.bst的左孩子和右孩子都是bst 發現對於每一棵子樹,它的根結點總是對應該子樹的後序序列的最後乙個數 ...