/**
*
* 思路: 先找出最右右孩子的位置,那么从此位置到父节点之间不能含有比
* 父节点小的节点;
* 然后以此位置有分界点,遍历左子树和右子树
*/
public class Test {
public static void main(String[] args) {
test1();
test2();
test3();
test4();
test5();
test6();
}
/**
* 既有左子树又有右子树
*/
static void test1() {
int[] arr = {5,7,6,9,11,10,8};
System.out.println(existTree(arr, 0, arr.length - 1));
}
/**
* false
*/
static void test2() {
int[] arr = {};
System.out.println(existTree(arr, 0, arr.length - 1));
}
/**
* 只有右子树
*/
static void test3() {
int[] arr = {9,8,7,6};
System.out.println(existTree(arr, 0, arr.length - 1));
}
/**
* false
*/
static void test4() {
int[] arr = {9,5,7,6};
System.out.println(existTree(arr, 0, arr.length - 1));
}
/**
* 只有左子树
*/
static void test5() {
int[] arr = {4,6,5,7};
System.out.println(existTree(arr, 0, arr.length - 1));
}
/**
* false
*/
static void test6() {
int[] arr = {4,7,5,6};
System.out.println(existTree(arr, 0, arr.length - 1));
}
public static boolean existTree(int[] arr, int left, int right) {
if (arr == null || arr.length < 1) {
return false;
}
if (left >= right ) {
return true;
}
int righterChildInx = right;
for (int i = right - 1; i > -1; i--) {
if (arr[i] > arr[right]){
righterChildInx = i;
}
}
for (int j = righterChildInx; j <= right; j++){
if (arr[j] < arr[right]){
return false;
}
}
return existTree(arr, left, righterChildInx - 1) == true &&
existTree(arr, righterChildInx, right - 1) == true;
}
}
输入一个后序遍历后的数组,判断是否能有一颗树满足-java
最新推荐文章于 2022-11-24 19:27:04 发布