zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 04.05. 合法二叉搜索树

    题目:

    https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/

    实现一个函数,检查一棵二叉树是否为二叉搜索树。

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

    分析:

    两种做法,利用二分搜索树中序遍历的性质,节点val值的顺序应该是严格递增的。可以每遍历到一个节点就和上一个节点比较,如果符合条件就继续。

    第二种由于二分搜索树的性质其根节点右子树的所有节点值都应该大于根节点,左子树的节点值应该小于根节点,基于这个条件我们可以维护一个最大值最小值区间,去递归判断每一个节点是否符合要求。

    判断左子树时就将区间最小值改为当前结点的值,判断右子树时就将区间最大值修改为当前结点的值即可。

    程序:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isValidBST(TreeNode root) {
            isValid(root);
            return res;
        }
        private void isValid(TreeNode node){
            if(node == null)
                return;
            isValid(node.left);
            if(v == null)
                v = node.val;
            else if(v >= node.val){
                res = false;
                return;
            }else{
                v = node.val;
            }
            isValid(node.right);
        }
        private Integer v;
        private boolean res = true;
    }
    class Solution {
        public boolean isValidBST(TreeNode root) {
            return isValid(root, Long.MIN_VALUE, Long.MAX_VALUE);
        }
        private boolean isValid(TreeNode node, long min, long max){
            if(node == null)
                return true;
            if(node.val > min && node.val < max)
                return isValid(node.left, min, node.val) && isValid(node.right, node.val, max);
            return false;
        }
    }
  • 相关阅读:
    python---RabbitMQ
    Apicloud学习第四天
    Apicloud学习第三天——获取云数据库的数据方法
    APICloud学习第二天——操作云数据库
    font-spider问题【已解决】
    Apicloud学习第一天
    sass补充(2019-3-9)
    sublime中编译的sass如何改变css输出风格?【这里有答案】
    SEO总结
    Sass学习第一天
  • 原文地址:https://www.cnblogs.com/silentteller/p/12427275.html
Copyright © 2011-2022 走看看