輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。
知識點:
二叉排序樹(binary sort tree),又稱二叉查詢樹(binary search tree),亦稱二叉搜尋樹。
二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3)左、右子樹也分別為二叉排序樹;
(4)沒有鍵值相等的節點。
而且這裡題目也強調了第四點,任意兩個數字都不同,也就是沒有鍵值相等的點。
分析:已知條件:後序序列最後乙個值為root;二叉搜尋樹左子樹值都比root小,右子樹值都比root大。
1、確定root;
2、遍歷序列(除去root結點),找到第乙個大於root的位置,則該位置左邊為左子樹,右邊為右子樹;
3、遍歷右子樹,若發現有小於root的值,則直接返回false;(不用再去遍歷左子樹確認是否有大於root的值,因為上一步找到第乙個大於root值的位置的時候,就已經確認了左邊一定全部小於root)
4、分別判斷左子樹和右子樹是否仍是二叉搜尋樹(即遞迴步驟1、2、3)。
ac**:
public class solution
private boolean vertify1(int a, int start, int end)
for (int j = i; j < end; ++j)
return vertify1(a, start, i - 1) && vertify1(a, i, end - 1);
}}
***************=talk is cheap, show me the code***************==== 二叉搜尋樹的後序遍歷判斷
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。之前對於二叉搜尋樹,只知道中序遍歷是遞增的,今天做到這道題目,要求判斷陣列是不是二叉搜尋樹後序遍歷的結果,一開始有點懵,後來在紙上畫畫,感覺很像遞迴的感覺,有一種...
判斷陣列是否某二叉搜尋樹的後序遍歷
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。public class solution public static boolean verifysquenceofbst int sequence,int s...
判斷陣列是否某二叉搜尋樹的後序遍歷
解題思路 由於是後序遍歷結果,也就是陣列最後乙個元素是根節點root,按照二叉搜尋樹的定義,陣列前面的元素中前半部分比root小,後半部分比root大,我們通過遍歷陣列跟root比較,如果比root大,記錄這個位置i,從這個i到直到最後的元素跟root比較,如果還有比root小的元素,說明不符,返回...