剑指offer23 二叉搜索树的后序遍历序列(java实现)

版权声明:转载请标明出处哦 https://blog.csdn.net/easy_purple/article/details/85218958

题目

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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;
}

猜你喜欢

转载自blog.csdn.net/easy_purple/article/details/85218958