LeetCode 第98题--验证二叉搜索树
1. 题目
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
2. 思路
这道题有多重解法,从根源来说,这是一个判断一棵树的中序遍历是不是一个升序。
2.1 使用递归
1.使用递归,使用递归的时候有一个坑,就是不能只判断当前值和左子树右子树的大小,而是要比较整棵树的极大值和极小值。
2.同时还要注意一点,每次递归的时候一定要选好终止位置,每一次我都选的恰好和正确答案错过。。。。。虽然说都能做出来,但是却有简单和复杂的区别。这道题的中止条件就是这个节点是不是空节点,我选的中止条件就是他是否还有子节点。
如果按照我的想法,就要分4种情况讨论,但是按照答案的中止条件,就只有一种情况讨论,复杂程度可想而知。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
def isValidBST(self, root: TreeNode,left =float('-inf'),right = float('inf') ) -> bool:
if not root:
return True
if (root.val <= left)or (root.val >= right):
return False
else:
return self.isValidBST(root.left,left,root.val) and self.isValidBST(root.right,root.val,right)
2.2 使用中序遍历
这道题使用中序遍历,判断是不是一个升的序列。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
def isValidBST(self, root: TreeNode) -> bool:
list1 = []
def middlesearch(root1):
if not root1:
pass
else:
middlesearch(root1.left)
list1.append(root1.val)
middlesearch(root1.right)
middlesearch(root)
return list1 == sorted(list1) and len(set(list1)) == len(list1)
LeetCode 第98题--验证二叉搜索树的更多相关文章
- LeetCode第[98]题(Java):Validate Binary Search Tree(验证二叉搜索树)
题目:验证二叉搜索树 难度:Medium 题目内容: Given a binary tree, determine if it is a valid binary search tree (BST). ...
- [LeetCode] 98. Validate Binary Search Tree 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- LeetCode:验证二叉搜索树【98】
LeetCode:验证二叉搜索树[98] 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当 ...
- LeetCode(98): 验证二叉搜索树
Medium! 题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- LeetCode 98. 验证二叉搜索树 | Python
98. 验证二叉搜索树 题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目 给定一个二叉树,判断其是否是一个有效的 ...
- Java实现 LeetCode 98 验证二叉搜索树
98. 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- 【LeetCode】98. 验证二叉搜索树
98. 验证二叉搜索树 知识点:二叉树:递归 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大 ...
- 力扣Leetcode 98. 验证二叉搜索树
验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身 ...
- [LeetCode] Validate Binary Search Tree 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
随机推荐
- js粘贴图片并显示
var fromDa; $(function(){ document.getElementById('app').addEventListener('paste', function(e) { if( ...
- 手机网页H5 自适应不同分辨率的屏幕 必学标签meta之viewport
viewport 语法介绍 <meta name="viewport"content=" height = [pixel_value | device-height ...
- <sUbjeCt>Reverse aAlignment SemInaR
翻译过来就是有关逆序对问题的专题. 因为大胆报名担任学校专题讲师所以跪着也要准备好课件...那什么是逆序对? 逆序对就是序列中ai>aj且i<j的有序对 举个栗子: 其中,5>4,但 ...
- js算法(1)
数组排序 arr.sort(function compare(a,b){return b.value-a.value}); json 排序 $.getJSON('URl',function(data) ...
- Excel特殊符号的录入与录入的秘诀
软键盘就是输入法上的软键盘 右键单击软键盘 右键! 通过code函数得到符号的数字 按住alt键然后输入数字才可以得到符号 注意是在数字键盘 右边数字键盘区域 插入特殊符号 跳转方向的设置 如果超过 ...
- 关于在vuejs中动态加载不确定数量和内容的组件的解决方案
在做一个门户项目的时候,客户要求需要进行私人化定制,每个人进入首页的时候可以自定义首页显示的版块 要在4.50个组件中显示随机N个组件按照每个人选定的顺序排列.需求说完了,接下来说说解决方案: htm ...
- 如何保存HTTPrequestbase和CloseableHttpResponse
在测试过程中,有一个重要的工作就是保存记录"现场",以方便开发人员更快发现BUG解决问题.在接口测试中更是如此,如果开发人员能够根据BUG的信息直接复现请求,是一件很方便的事情.为 ...
- 公子奇带你一步一步了解Java8中Lambda表达式
在上一篇<公子奇带你一步一步了解Java8中行为参数化>中,我们演示到最后将匿名实现简写为 (Police police) -> "浙江".equals(poli ...
- Java高级特性——流
以上就是这段时间学习完流的知识以后我的总结,.mmap文件可以去我的github上获取:https://github.com/xiaozhengyu/StudyNotes.git
- HBase学习笔记(四)—— 架构模型
在逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列. 但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional m ...