检查是否是BST 牛客网 程序员面试金典 C++ java Python
检查是否是BST 牛客网 程序员面试金典 C++ java Python
- 题目描述
- 请实现一个函数,检查一棵二叉树是否为二叉查找树。
- 给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。
C++
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Checker {
public:
//run:4ms memory:472k
bool checkBST(TreeNode* root) {
if (NULL == root) return true;
if (NULL != root->left){
if (root->left->val > root->val) return false;
if (root->left->right && (root->left->right->val > root->val)) return false;
}
if (NULL != root->right){
if (root->right->val < root->val) return false;
if (root->right->left && (root->right->left->val < root->val)) return false;
}
return checkBST(root->left) && checkBST(root->right);
}
};
java
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class Checker {
// run: 42ms memory:10128k
public boolean checkBST(TreeNode root){
if (null == root) return true;
if (root.left != null){
if (root.left.val > root.val) return false;
if (root.left.right !=null && root.left.right.val > root.val) return false;
}
if (root.right != null){
if(root.right.val < root.val) return false;
if(root.right.left != null && root.right.left.val < root.val) return false;
}
return checkBST(root.left) && checkBST(root.right);
}
}
Python
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Checker:
#run:48ms memory:5852k
def checkBST(self, root):
if None == root: return True
if None != root.left:
if root.left.val > root.val: return False
if None != root.left.right and root.left.right.val > root.val: return False
if None != root.right:
if root.right.val <root.val: return False
if None != root.right.left and root.right.left.val < root.val: return False
return self.checkBST(root.left) and self.checkBST(root.right)
检查是否是BST 牛客网 程序员面试金典 C++ java Python的更多相关文章
- 寻找下一个结点 牛客网 程序员面试金典 C++ java Python
寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...
- 碰撞的蚂蚁 牛客网 程序员面试金典 C++ Java Python
碰撞的蚂蚁 牛客网 程序员面试金典 C++ Java Python 题目描述 在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率.(这里的相撞是指存在任意两只 ...
- 高度最小的BST 牛客网 程序员面试金典 C++ Python
高度最小的BST 牛客网 程序员面试金典 C++ Python 题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] val ...
- 有向路径检查 牛客网 程序员面试金典 C++ Python
有向路径检查 牛客网 程序员面试金典 C++ Python 题目描述 对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径. 给定图中的两个结点的指针DirectedGraphNode* a, ...
- 平衡二叉树检查 牛客网 程序员面试金典 C++ Python
平衡二叉树检查 牛客网 程序员面试金典 C++ Python 题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1. 给定指向树根结点的指针T ...
- 回文链表 牛客网 程序员面试金典 C++ Python
回文链表 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...
- 翻转子串 牛客网 程序员面试金典 C++ Python
反转子串 牛客网 程序员面试金典 C++ Python 题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串.请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查 ...
- 像素反转 牛客网 程序员面试金典 C++ Python
像素反转 牛客网 程序员面试金典 题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度. 给定 ...
- 二进制插入 牛客网 程序员面试金典 C++ Python java
二进制插入 牛客网 程序员面试金典 题目描述 有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始. 给定两个数int n和int ...
随机推荐
- scrum项目冲刺_day03总结
摘要:今日完成任务. 1.图像识别已完成,但是较为卡顿,仍需优化 2.语音输入正在进行 3.搜索功能正在进行 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(基本完成) 2. ...
- Python树莓派 爬虫心得
平台: 树莓派 linux 语言:python 搞一个爬虫都清楚是怎么回事,我这里玩过之后有下面的心得: 为什么要用树莓派呢,省电啊,没乱七八糟的桌面问题,可以一直开着. 1.树莓派上的磁盘写入对于不 ...
- iNeuLink硬件网关与iNeuOS工业互联网操作系统互联互通应用案例
目 录 1. 应用概述... 2 2. 模拟硬件设备配置... 2 3. iNeuLink硬件网关配置... 4 3.1 硬件介绍... ...
- 一起学习PHP中GD库的使用(三)
上篇文章我们已经学习了一个 GD 库的应用,那就是非常常用的制作验证码的功能.不过在现实的业务开发中,这种简单的验证码已经使用得不多了,大家会制作出更加复杂的验证码来使用.毕竟现在的各种外挂软件已经能 ...
- 在PHP中操作临时文件
关于文件相关的操作,想必大家已经非常了解了,在将来我们刷到手册中相关的文件操作函数时也会进行详细的讲解.今天,我们先来了解一下在 PHP 中关于临时文件相关的一些内容. 获取 PHP 的默认临时创建文 ...
- fibnacci数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...
- 一文让你彻底理解having和where的区别
having子句与where都是设定条件筛选的语句,有相似之处也有区别. having与where的区别: having是在分组后对数据进行过滤 where是在分组前对数据进行过滤 having后面可 ...
- Java集合框架总览
Java集合 Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口有 3 种子类型,Lis ...
- lua常用一些功能
lua在openresty中获取请求的请求头 local head_table = ngx.req.get_headers() 由于table类型,无法直接使用ngx.say()显示,需要转换为cjs ...
- 『GoLang』fmt包的使用
目录 1. fmt 包初识 2. 格式化 verb 应用 2.1 通用 2.2 布尔值 2.3 整数 2.4 浮点数与复数 2.5 字符串和 []byte 2.6 指针 2.7 其他 flag 2.8 ...