• 程序员面试金典-面试题 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;
        }
    }
  • 相关阅读:
    MyBatis代码自动生成
    英语单词--程序员专属
    动态规划小例子
    Dijkstra 算法
    矩阵变换
    (转)贝塞尔曲线
    山寨了@上位者的怜悯的样式= =
    HDU 1115 (计算多边形重心)
    HDU 1147(线段相交+链表)
    HDU 1276 (直接链表模拟)
  • 原文地址:https://www.cnblogs.com/silentteller/p/12427275.html
Copyright © 2020-2023  润新知