zoukankan      html  css  js  c++  java
  • 98. Validate Binary Search Tree

    一、题目

      1、审题

      

      2、分析

        判断所给二叉树是否时一个二分查找树。(left < top < right)

    二、解答

      1、思路:

        方法一、

          采用中序遍历,将遍历的节点值放入一个 List 中,再判断 List 中的元素是否时升序的即可。

    public boolean isValidBST(TreeNode root) {
        
            if(root == null)
                return true;
            
            List<Integer> list = new ArrayList<Integer>();
            Stack<TreeNode> stack = new Stack<TreeNode>();
            TreeNode cur = root;
            while(cur != null || !stack.isEmpty()) {
                while(cur != null) {
                    stack.add(cur);
                    cur = cur.left;
                }
                
                cur = stack.pop();
                list.add(cur.val);
                cur = cur.right;
            }
            
            int tmp = list.get(0);
            for(int i = 1; i < list.size(); i++) {
                if(list.get(i) < tmp)
                    return false;
                tmp = list.get(i);
            }
            
            return true;
        }

      

      方法二、

        采用中序遍历,直接在便利过程中进行判断是否符合二叉查找树条件。(无须用 List 存储结点)

    public boolean isValidBST2(TreeNode root) {
            
            if(root == null)
                return true;
            
            Stack<TreeNode> stack = new Stack<TreeNode>();
            TreeNode cur = root;
            TreeNode pre = null;
            while(cur != null || !stack.isEmpty()) {
                while(cur != null) {
                    stack.add(cur);
                    cur = cur.left;
                }
                
                cur = stack.pop();
                if(pre != null && pre.val >= cur.val)
                    return false;
                pre = cur;
                cur = cur.right;
            }
            
            return true;
        }

        

        方法三、

          利用递归判断 left 是否小于当前结点值,right 是否大于当前结点值。

    public boolean isValidBST3(TreeNode root) {
            
            return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
        }
        private boolean isValidBST(TreeNode root, long minValue, long maxValue) {
            
            if(root == null)
                return true;
            
            if(root.val >= maxValue || root.val <= minValue)
                return false;
            
            return isValidBST(root.left, minValue, root.val) && isValidBST(root.right, root.val, maxValue);
        }
  • 相关阅读:
    css3圆环百分比,菜单栏定位导航
    Css中的两个重要概念:块状元素和内联元素
    前端进阶试题(css部分)
    HTML5移动开发学习笔记之CSS3基础学习
    HTML5移动开发学习笔记之Canvas基础
    js加载从0到80变化过程代码,让其4s中加载完毕
    我了解到的JavaScript异步编程
    原生JS+Canvas实现五子棋游戏
    Web缓存相关知识整理
    百度前端技术学院2017学习总结
  • 原文地址:https://www.cnblogs.com/skillking/p/9709874.html
Copyright © 2011-2022 走看看