zoukankan      html  css  js  c++  java
  • 98. 验证二叉搜索树

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

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

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

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

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

    思路:

      • 二叉搜索树的中序遍历,是从小到大有序排列的;
      • 首先,获得二叉搜索树的中序遍历结果;
      • 然后,判断中序遍历结果是否是单调递增的。

    class Solution {
        public boolean isValidBST(TreeNode root) {
            if(root == null) return true;
            List<Integer> list = new ArrayList<>();
            function(root, list);
            for(int i = 1; i < list.size(); i++){ //判断中序遍历后的结果,是否满足递增的条件
                if(list.get(i) <= list.get(i-1)) return false; //不满足,返回 false
            }
            return true; //都满组,返回 true
        }
        public void function(TreeNode root, List<Integer> list){ //中序遍历
            if(root == null) return ;
            function(root.left, list);
            list.add(root.val);
            function(root.right, list);
        }
    }
  • 相关阅读:
    Oracle之PL/SQL学习笔记
    Git常用命令
    Web前端上万字的知识总结
    Objective-C中小怪兽的逻辑
    PHP精选数组函数
    数据库连接字符串方法
    WM_CAP_DRIVER_CONNECT
    GB2312/ANSI编码转中文字符
    opencv播放不了AVI视频的问题
    我的MFC/C++学习笔记 http://blog.bccn.net/CrystalFan/6909
  • 原文地址:https://www.cnblogs.com/luo-c/p/13971219.html
Copyright © 2011-2022 走看看