判断一棵满二叉树是否为二叉搜索树

判断一棵满二叉树是否为二叉搜索树

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");
    }
}
全部评论

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务