golang力扣leetcode 98. 验证二叉搜索树

简介: golang力扣leetcode 98. 验证二叉搜索树

题解

第一种做法,递归左右子树

第二种做法中序遍历,然后遍历一遍slice即可,有一个坑就是value相同也是false

代码

func isValidBST(root *TreeNode) bool {
    return helper(root, math.MinInt64, math.MaxInt64)
}
func helper(root *TreeNode, lower, upper int) bool {
    if root == nil {
        return true
    }
    if root.Val <= lower || root.Val >= upper {
        return false
    }
    return helper(root.Left, lower, root.Val) && helper(root.Right, root.Val, upper)
}
package main
func main() {
}
type TreeNode struct {
  Val   int
  Left  *TreeNode
  Right *TreeNode
}
func isValidBST(root *TreeNode) bool {
  result := make([]int, 0)
  inorder(root, &result)
  return check(result)
}
func inorder(root *TreeNode, result *[]int) {
  if root == nil {
    return
  }
  inorder(root.Left, result)
  *result = append(*result, root.Val)
  inorder(root.Right, result)
}
func check(cnt []int) bool {
  for i := 0; i < len(cnt)-1; i++ {
    if cnt[i] >= cnt[i+1] {
      return false
    }
  }
  return true
}


目录
相关文章
|
2月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
2月前
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
10 1
|
2月前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
17 1
|
2月前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
40 0
|
2月前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
10 0
|
2月前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
16 0
|
2月前
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
10 0
|
2月前
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
11 0
|
2月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
13 0
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
121 4
Golang语言之管道channel快速入门篇