当前位置: 首页 > 面试题库 >

请你说一下BST的特点,并手写代码判断一棵树是不是BST

高修筠
2023-03-14
本文向大家介绍请你说一下BST的特点,并手写代码判断一棵树是不是BST相关面试题,主要包含被问及请你说一下BST的特点,并手写代码判断一棵树是不是BST时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

BST(二叉排序树):

1、每个结点都有一个作为搜索依据的关键码,所有结点的关键码不同

2、左子树上所有结点的关键码小于根节点的关键码

3、右子树所有结点的关键码大于根节点的关键码

4、左子树和右子树也是BST

判断一棵树是不是BST

class Node {
	int data;
	Node left;
	Node right;
}
public class BSTChecker {
	private static int lastVisit = Integer.MIN_VALUE;
	public static boolean isBST(Node root) {
	if(root == null) return true;
	boolean judgeLeft = isBST(root.left); // 先判断左子树
	if(root.data >= lastVisit && judgeLeft) { // 当前节点比上次访问的数值要大
    	lastVisit = root.data;
    } else {
    	return false;
    }
    boolean judgeRight = isBST(root.right); // 后判断右子树
    return judgeRight;
}
}  

 

 

 类似资料:
  • 本文向大家介绍请你说一说快速排序,并手写代码相关面试题,主要包含被问及请你说一说快速排序,并手写代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 2、快速排序的三个步骤: (1)选择基准:在

  • 本文向大家介绍判断一个链表是否为回文链表,说出你的思路并手写代码相关面试题,主要包含被问及判断一个链表是否为回文链表,说出你的思路并手写代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 思路:使用栈存储链表前半部分,然后一个个出栈,与后半部分元素比较,如果链表长度未知,可以使用快慢指针的方法,将慢指针指向的元素入栈,然后如果快指针指向了链表尾部,此时慢指针指向了链表中间  

  • 本文向大家介绍请你来手写一下快排的代码相关面试题,主要包含被问及请你来手写一下快排的代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 本文向大家介绍给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例相关面试题,主要包含被问及给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例时的应答技巧和注意事项,需要的朋友参考一下 参考回答: IP的格式:(1~255).(0~255).(0~255).(0~255) 方法一:基于对字符串的处理   方法二:正则表达式     测试用例: 等价类划分: 有

  • 本文向大家介绍怎么判断一个数是二的倍数,怎么求一个数中有几个1,说一下你的思路并手写代码?相关面试题,主要包含被问及怎么判断一个数是二的倍数,怎么求一个数中有几个1,说一下你的思路并手写代码?时的应答技巧和注意事项,需要的朋友参考一下 1、判断一个数是不是二的倍数,即判断该数二进制末位是不是0: a % 2 == 0 或者a & 0x0001 == 0。 2、求一个数中1的位数,可以直接逐位除十取

  • 本文向大家介绍请你手写一下单例模式代码?相关面试题,主要包含被问及请你手写一下单例模式代码?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 懒汉式单例模式:延迟实例化,但节省空间 饿汉式单例模式:急切的创建实例,而不用延迟实例化 IoDH实现单例模式