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;
        }
    
  • 相关阅读:
    HTML5标签的标准属性
    HTML页面莫名宽了一点
    HTTP通信基础HTTP协议数据结构分析
    JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    linux 下安装redis报错解决
    单元测试unittest
    python嵌套循环练习
    python操作MySQL
    Open XML for Office developers
    在线处理页面内容
  • 原文地址:https://www.cnblogs.com/xym4869/p/12676075.html
Copyright © 2011-2022 走看看