1. 程式人生 > >劍指offer23 二叉搜尋樹的後序遍歷序列(java實現)

劍指offer23 二叉搜尋樹的後序遍歷序列(java實現)

題目

輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出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;
}