題目描述
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
樣例
輸入:輸出:true
思路分析
遞迴思路
已知條件:後序序列最後乙個值為root;二叉搜尋樹左子樹值都比root小,右子樹值都比root大。
1、確定root;
2、遍歷序列(除去root結點),找到第乙個大於root的位置,則該位置左邊為左子樹,右邊為右子樹;
3、遍歷左子樹,若發現有大於root的值,則直接返回false;
4、分別判斷左子樹和右子樹是否仍是二叉搜尋樹(即遞迴步驟1、2、3)。
迴圈思路
通過while迴圈 遍歷陣列
利用len長度的變化 來檢測左右子樹的正確性(即左子樹的節點均小於根節點,右子樹的節點均大於根節點)
**
遞迴方法
public boolean verifysquenceofbst(int sequence)
return verifysquenceofbst(sequence, 0, sequence.length-1);
} public boolean verifysquenceofbst(int sequence, int start, int end)
int i = end;
while (i>start && sequence[i-1]>sequence[end])
for (int j = start; j <= i-1; j++)
} return verifysquenceofbst(sequence, start, i-1) && verifysquenceofbst(sequence, i, end-1);
}
結果
迴圈方法
public boolean verifysquenceofbst(int sequence)
int len = sequence.length;
int i = 0;
while (--len > 0)
i = 0; //初始化i,i相當於「哨兵」的角色
} return true;
}
結果 劍指offer 23 二叉搜尋樹的後續遍歷
程式設計資料獲取 codelab 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。我們先來了解一下什麼是二叉搜尋樹 二叉查詢樹 binarysearchtree 也稱為二叉搜尋樹 有序二叉樹或排序二叉樹是指一棵...
23 劍指offer 二叉搜尋樹的後序遍歷序列
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。解題思路 本題中的樹為二叉搜尋樹,滿足左 根 右 1 求出陣列最後乙個元素,為根節點 2 遍歷,將所有連續小於sequence n 1 的存入vecto...
劍指offer 23 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同 二叉搜尋樹的性質 根節點大於左子樹所有元素,小於右子數的所有元素。那麼後序遍歷的話,最後乙個元素就為根節點root。那麼本題的思路如下 找到陣列中左右子樹的分界點...