首页 > 其他分享 >BM34 判断是不是二叉搜索树

BM34 判断是不是二叉搜索树

时间:2023-01-03 14:15:13浏览次数:31  
标签:right return BM34 val 二叉 搜索 root 节点 left

题目描述

image

思路分析

第一种方法:二叉搜索树的中序遍历一定是递增的,只需判断中序遍历的数组即可

第二种方法:
- 如果当前节点的值小于左区间或者大于右区间,则返回 false。
- 否则,继续分别递归左右儿子节点:
- 递归左儿子,并将左儿子的右区间修改为父节点的值;
- 递归右儿子,并将右儿子的左区间修改为父节点的值。
- 最后,如果没有返回false,说明满足二叉搜索树,返回true。

代码参考

/*
  二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。
  这道题我们考虑使用递归来做
  思考:
      1. 每个节点需要做什么
      2. 之后如何递归
      3. 递归退出条件
    每个节点如果传递进来,都需要判断它们的大小关系,也就是 root.left.val < root.val < root.right.val
    如果符合条件那么继续将左子树和右子树传递
    如果左子树和右子树为空,则返回true
  第二种思路:
    中序遍历的结果一定是从小到大排列的,我们只需要得到中序遍历的结果
    之后再判断是否从小到大排列的,返回结果即可
*/
const isValidBST = function (root) {
  // if (!root) return true
  // if (root.left.val <= root.val <= root.right.val) {
  //   return isValidBST(root.left) && isValidBST(root.right)
  // } else {
  //   return false
  // }
  const result = []
  const dfs = (root) => {
    if (!root) return
    dfs(root.left)
    result.push(root.val)
    dfs(root.right)
  }
  dfs(root)
  for (let i = 0; i < result.length - 1; i++) {
    if (result[i] <= result[i + 1]) continue
    else return false
  }
  return true
}
// 方法二:
const isValidBST2 = function (root) {
  const fun = (root, left, right) => {
    if (root == null) return true
    if (root.val <= left || root.val >= right) return false
    return fun(root.left, left, root.val) && fun(root.right, root.val, right)
  }
  return fun(root, -Infinity, Infinity)
}

标签:right,return,BM34,val,二叉,搜索,root,节点,left
From: https://www.cnblogs.com/zx529/p/17021907.html

相关文章

  • leetcode-637. 二叉树的层平均值
    637.二叉树的层平均值-力扣(Leetcode)层次遍历+求平均值,Go中的切片也可以模拟queue的功能/***Definitionforabinarytreenode.*typeTreeNodestruct{*......
  • BM33 二叉树的镜像
    题目描述思路分析采用递归的方法,对每一个节点做相同的处理,交换节点位置,也就类似于我们交换两个变量的值一样,需要借助一个临时变量。递归:-传递过来的节点需要做什么......
  • BM32 合并二叉树
    题目描述已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。例如:两颗二叉树是:tree1tree2合......
  • BM31 对称的二叉树
    题目描述思路分析使用递归的方法,每次传递镜像的节点进去,compare函数专门用于比对,对不同的条件做不同的处理代码参考constisSymmetrical=function(pRoot){//w......
  • 关于搜索引擎及其开发
    托google、百度们成功的福,搜索引擎火了半边天。很多人都想跨到这个行业里边来。前两天在公司里边面试了一些人,基本上没有感到满意。不是说从业经验不够,有些也已经工作了三年......
  • BM29 二叉树中和为某一值的路径(一)
    题目描述思路分析采用递归的方法,左(右)子树的sum=sum-root.val。每次都减去当前的root值,如果左子树或者右子树的节点值等于sum,则说明找到了,返回true,否则当root为空......
  • 力扣110 判断是否是平衡二叉树
    力扣110判断是否是平衡二叉树题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对......
  • leetcode-617. 合并二叉树
    617.合并二叉树-力扣(Leetcode)递归合并二叉树easy/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode*......
  • shodan 黑暗搜索引擎
    shodan介绍服务器上的扫描器24小时在扫描网络设备安装配置安装pipinstallshodan初始化shodaninitapi获取api淘宝买永久会员初级15,高级35查看是否是会员......
  • 力扣107 二叉树的层序遍历
    力扣107二叉树的层序遍历题目:给你二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例1:输入:root......