判断一棵满二叉树是否为二叉搜索树
判断一棵满二叉树是否为二叉搜索树
http://www.nowcoder.com/questionTerminal/76fb9757332c467d933418f4adf5c73d
思路:
从第二叉树的第二层开始判断,每两个节点一组,通过数组下标找到其父节点,根据规则对比
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"); } }