劍指offer23 二叉搜尋樹的後序遍歷序列(java實現)
阿新 • • 發佈:2018-12-23
題目
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
思路(遞迴)
後序遍歷,即根節點最後輸出。這是解題線索。
- 我們根據陣列最後一個數來遍歷整個陣列
- 比陣列小的是這棵樹的左子樹。
- 比陣列大的是這棵樹的右子樹。
- 遞迴判斷左子樹
- 遞迴判斷右子樹
程式碼
public static boolean bst(int[] list, int begin, int end) { if (list.length == 0 || begin > end) { return false; } int root = list[end];// 根節點 int i = begin; for (; i < end; i++) {// 左子樹的節點均小於根節點 if (list[i] > root) { break; } } for (int j = i; j < end; j++) {// 右子樹的節點均大於根節點 if (list[j] < root) { return false; } } boolean left = true; if (begin < i - 1) {// 判斷左子樹 left = bst(list, begin, i - 1); } boolean right = true; if (i < end - 1) {// 判斷右子樹 right = bst(list, i, end - 1); } return left && right; }