【LeetCode】验证二叉搜索树(dfs或中序遍历)
力扣 验证二叉搜索树(dfs或中序遍历)
题目链接:https://leetcode-cn.com/problems/validate-binary-search-tree/
题目的意思就是验证一棵树是不是二叉搜索树
二叉搜索树的特征就是左孩子值小于根节点值,右孩子值大于根节点值
解析:
- 方法1就是进行一遍中序遍历,如果得到的序列是升序的,那么该树是二叉搜索树
- 方法2:
- 从根节点开始搜索,每个节点都当做根节点,根节点值不能小于最小值,不能大于最大值,每次根据搜索方向改变当前最大最小值即可
- 当搜索左子树时,最大值就是根节点值
- 当搜索右子树时,最小值就是根节点值
时间复杂度:O(N),N个节点都要遍历一遍
空间复杂度:O(N),方法2当树退化成链表时递归需要O(N)栈空间,方法1需要额外存储遍历结果
- 中序遍历
var ans []int
func dfs(root *TreeNode) {
if root==nil{
return
}
if root.Left!=nil{
dfs(root.Left)
}
ans=append(ans,root.Val)
if root.Right!=nil{
dfs(root.Right)
}
}
func isValidBST(root *TreeNode) bool {
ans=[]int{}
dfs(root)
flag:=true
for i:=0;i<len(ans)-1;i++{
if ans[i]>=ans[i+1] {
flag=false
break
}
}
return flag
}
- dfs
func dfs(root *TreeNode,minValue,maxValue int) bool{
if root==nil{
return true
}
if root.Val<=minValue||root.Val>=maxValue{
return false
}
return dfs(root.Left,minValue,root.Val) && dfs(root.Right,root.Val,maxValue)
}
func isValidBST(root *TreeNode) bool {
return dfs(root,math.MinInt64,math.MaxInt64)
}
心之所向,素履以往
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-03-10 腾讯笔试题 字符移位(字符串操作)
2019-03-10 华为笔试题 最高分是多少(线段树)
2019-03-10 华为笔试题 扑克牌大小(模拟,细节处理)
2019-03-10 华为笔试题 简答错误记录(字符串处理,好题!!!)