有效二叉查找树判断(java实现)

leetcode 原题 :(即判断二叉树是否为二叉查找树)

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node‘s key.
  • The right subtree of a node contains only nodes with keys greater than the node‘s key.
  • Both the left and right subtrees must also be binary search trees

下面采用java实现:

public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
      TreeNode(int x) { val = x; }
  }

public class ValidateBST{
    boolean flag=true;
    TreeNode pre=null;//保存前驱节点
    public boolean isValidBST(TreeNode root) {
         dfs(root);
         return flag;
    }  //采用中序遍历,如果前节点不小于当前节点的值,则不符合BST的条件
    private void dfs(TreeNode root){
        if(root!=null){
            dfs(root.left);
            if(pre!=null&&root.val<=pre.val)flag= false;
            pre=root;
            dfs(root.right);
        }
    }}
时间: 2024-12-17 22:37:44

有效二叉查找树判断(java实现)的相关文章

Java编程练习之判断Java文件名是否正确,判断邮箱格式是否正确和统计指定字符串中某字符现的次数

一判断Java文件名是否正确,判断邮箱格式是否正确 功能:判断Java文件名是否正确,判断邮箱格式是否正确.其中:合法的文件名应该以.java结尾:合法的邮箱名 中至少要包含 "@" , 并要求 "@" 在 "." 之前. 练习代码: public class Test { public static void main(String[] args) { //Java文件名 String fileName = "HelloWorld.j

如何判断java.io.File所读取的文件编码

如何判断java.io.File所读取的文件编码 问题 java中涉及到文件读取,就经常要考虑文件编码问题.虽然程序中一般都指定UTF-8编码,但是用户总可能提交各种编码的文件(特别是windows下用户),如果对这些文件不做判断就直接按照UTF-8的方式读取的话,是肯定会乱码的. 解决方案 java原生并不支持文件编码的判断,一般都是read文件的前几个字节来判断,需要自己编写工具类,判断的编码类型也比较少.最近找到了个开源的项目juniversalchardet,能比较优雅的完成这个任务.

1.20 Java基础总结 输入数据类型判断 Java低耦合原则 for嵌套思路

一.方法后边都要有(),表示参数 二.需要输入Int型的,判断输入是否为IntScanner scan = new Scanner(System.in); if(scan.hasNextInt){ int a = scan.nextInt();}else{ System.out.println("输入无效:")} 三.Java设计原则:低耦合和单一原则 判断里边耦合度高(&&...&&..太多内容)多个变量可能出现问题,或者出现自己不想要的结果,也不利于

HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)

Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题. 亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串. Input 本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二

数据结构--二叉查找树的java实现

上代码: package com.itany.erchachazhaoshu; public class BinarySearchTree<T extends Comparable<? super T>> { //定义二叉查找树的根节点 每一个查找二叉树都有一个自己的root 节点 root外界看不到 private BinaryNode<T> root; public BinarySearchTree() { root=null; } //节点类 private st

判断java中两个对象是否相等

java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false.但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象.言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture. 如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存

扑克模拟,牌型判断java版

Card类 package com.company; public class Card { private String color; private Integer value; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Integer getValue() { return value; } public void

判断java或js中的某个字符串中是否包含有某个字符或是字符串

js中: varCts = "aaddssyes"; if(Cts.indexOf("yes") > 0 ){     alert('Cts中包含Text字符串'); } 找的是最开始的位置,如果没找到,则返回的是-1. functionIndexDemo(str){    varstr1 = "BABEBIBOBUBABEBIBOBU"    vars = str1.indexOf(str);    return(s); } str是外边

二叉查找树的java实现

1 package 查找; 2 3 import edu.princeton.cs.algs4.Queue; 4 import edu.princeton.cs.algs4.StdOut; 5 6 public class BST<Key extends Comparable<Key>, Value> { 7 private class Node { 8 private Key key; // 键 9 private Value value;// 值 10 private Node