zoukankan      html  css  js  c++  java
  • LeetCode——验证二叉查找树

    Q:给定一个二叉树,判断其是否是一个有效的二叉搜索树。

    假设一个二叉搜索树具有如下特征:

    节点的左子树只包含小于当前节点的数。
    节点的右子树只包含大于当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。
    示例 1:

    输入:
    2
    /
    1 3
    输出: true
    示例 2:

    输入:
    5
    /
    1 4
      /
      3 6
    输出: false
    解释: 输入为: [5,1,4,null,null,3,6]。
      根节点的值为 5 ,但是其右子节点值为 4 。

    A:
    我发现我犯了两次,都是一开始认为遍历所有节点,保证node.right.val > node.val 和 node.left.val < node.val 对每个结点是否成立。但这样实际上是错的,应该是
    整个右子树的元素都应该大于该节点。
    中序遍历。遍历时每遍历到这个点看是不是比前面的点大
    我开始把所有节点都存起来了,发现没有这个必要。

        //这里我开始用的是Integer.MAX_VALUE,结果运行时直接用一个节点,节点数为Integer.MAX_VALUE。所以用的是Double
        private double pre = -Double.MAX_VALUE;
        public boolean isValidBST(TreeNode root) {
            if (root == null)
                return true;
            return inorder(root);
        }
    
        private boolean inorder(TreeNode root) {
            if (root == null)
                return true;
            boolean flag_left = inorder(root.left);
            boolean flag = true;
            if (root.val <= pre)
                flag = false;
            else
                pre = root.val;
            boolean flag_right = inorder(root.right);
            return flag && flag_left && flag_right;
        }
    
  • 相关阅读:
    腾讯TDW:大型Hadoop集群应用[转载]
    [转]常见分布式系统数据分布解析
    一种基于Storm的可扩展即时数据处理架构思考
    storm
    storm
    精华文章
    Dubbo使用解析及远程服务框架
    职责链实现的apache.chain使用
    设计模式之享元模式
    SVN安装与eclipseSVN插件基本使用
  • 原文地址:https://www.cnblogs.com/xym4869/p/12676075.html
Copyright © 2011-2022 走看看