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;
        }
    
  • 相关阅读:
    主从热备+负载均衡(LVS + keepalived)
    这12行代码分分钟让你电脑崩溃手机重启
    Linux 下虚拟机——Virtual Box
    软件著作权登记证书申请攻略
    ecshop整合discuz教程完美教程
    NetHogs——Linux下按进程实时统计网络带宽利用率
    深入研究CSS
    SSH远程会话管理工具
    nginx防止SQL注入规则
    mysql完美增量备份脚本
  • 原文地址:https://www.cnblogs.com/xym4869/p/12676075.html
Copyright © 2011-2022 走看看