思路:
从第二叉树的第二层开始判断,每两个节点一组,通过数组下标找到其父节点,根据规则对比
package NewCoder;
import java.util.Scanner;
public class IsBinarySearchTree {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputStr = sc.nextLine();
if (inputStr.equals("None")) {
System.out.println("True");
return;
}
String[] inputs = inputStr.split(",");
sc.close();
int[] nums = new int[inputs.length];
for (int i = 0; i < inputs.length; ++i) {
nums[i] = Integer.parseInt(inputs[i]);
}
//当前层节点的数量,从第二层开始判断
int currLayerNodeCount = 2;
for (int i = 1; i < nums.length; ) {
for (; i < (2 * currLayerNodeCount - 1); ) {
//父节点下标
int parentIndex = (int) (i / 2);
//n 下标在当前层相对于根节点左右子树的分界线
//n 的计算方法为 前面所有层节点之和 + 当前节点的一半
// 即(currLayerNodeCount - 1)+ currLayerNodeCount / 2
int n = currLayerNodeCount - 1 + currLayerNodeCount / 2;
//出错条件
// 左节点大于等于父节点 或者 右节点小于等于父节点
if (nums[i] >= nums[parentIndex] || nums[i + 1] <= nums[parentIndex] ||
(currLayerNodeCount != 2 && //或者 当层数大于第二层时
//当前节点相对于根节点为左子树时 右节点大于等于根节点
((i < n && nums[i + 1] >= nums[0])
//当前节点相对于根节点为右子树时 左节点小于等于根节点
|| (i >= n && nums[i] <= nums[0])))) {
System.out.println("False");
return;
}
i += 2;
}
currLayerNodeCount *= 2;
}
System.out.println("True");
}
}
京公网安备 11010502036488号