BM34 判断是不是二叉搜索树

思路: 对于这种dfs思想的算法,分三步走:
  1. 先判断空节点
  2. 再判断左子树和右子树
  3. 根据左子树和右子树返回的信息以及当前节点的信息,返回最终的结果
  4. 这里有一个技巧:用一个全局变量记录递归过程中出现不合法的情况,这样递归可以少返回一个值
 
package main

import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
const (
INT_MAX = 1<<41
INT_MIN = -(1<<41)
)
var res bool
func getMax(left int,right int) int{
if left > right{
return left
}
return right
}
func getMin(left int,right int)int{
if left < right{
return left
}
return right
}
func dfs(root *TreeNode)(min int,max int){
//返回以root为根节点的二叉树的最小值,最大值,以及该二叉树是否是合法的搜索树
if root == nil{
return INT_MAX,INT_MIN
}
leftMin,leftMax := dfs(root.Left)
rightMin,rightMax := dfs(root.Right)
if root.Val <= leftMax || root.Val >= rightMin{
res = false
}

min = getMin(leftMin,root.Val)
max = getMax(rightMax,root.Val)

return min,max
}
func isValidBST( root *TreeNode ) bool {
// write code here
if root == nil{
return true
}
res = true
_,_ = dfs(root)
return res
}
posted @   重新出发123  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示