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

BM34 判断是不是二叉搜索树

时间:2023-02-03 12:23:05浏览次数:45  
标签:right return BM34 int dfs 二叉 搜索 TreeNode root

思路: 对于这种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 }

标签:right,return,BM34,int,dfs,二叉,搜索,TreeNode,root
From: https://www.cnblogs.com/starter-songudi/p/17088731.html

相关文章

  • 【DFS】LeetCode 235. 二叉搜索树的最近公共祖先
    题目链接235.二叉搜索树的最近公共祖先思路与【DFS】LeetCode236.二叉树的最近公共祖先一模一样代码classSolution{publicTreeNodelowestCommonAncesto......
  • 【DFS】LeetCode 236. 二叉树的最近公共祖先
    题目链接236.二叉树的最近公共祖先思路代码classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){if(roo......
  • uva839 (二叉树+递归)
    题目链接:​​点击这里​​题目大意就是根据干杠平衡原理,判断题目所给出的数据组成的天平能否平衡。注意,此天平可能包含子天平。输入时,如果w为0,则表示包含子天平,子天平按照......
  • Treap 平衡二叉查找树
    【基本概念】Treap=Tree+Heap。Tree是指二叉搜索树,而Heap指的是二叉堆,一般是最小堆。Treap需要维护两值,一个是二叉搜索树中的键值(key),另一个是最小堆中的优先级(aux)。Treap是......
  • BST 二叉搜索树
    BST,又叫平衡二叉树,是一种循关键码访问的二叉树,每个节点带有一个数值就是关键码,并且要求保持顺序性,即任一节点不小于其左后代,不大于其右后代(注意是后代,不是孩子)。BST的顺序性......
  • 力扣654 最大二叉树
    题目:给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子......
  • 力扣106 从中序与后序遍历序列构造二叉树
    题目:给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例:输入:inorder=[9......
  • 二叉树的不同形态
    题目简介给定二叉树T(树深度H<=10,深度从1开始,结点个数N<1024,结点编号1~N)的层次遍历序列和中序遍历序列,输出T从左向右叶子结点以及二叉树先序和后序遍历序列。输入格式输......
  • LeetCode 对称二叉树算法题解 All In One
    LeetCode对称二叉树算法题解AllInOne对称二叉树原理图解101.SymmetricTree对称二叉树https://leetcode.com/problems/symmetric-tree/https://leetcode.c......
  • 《人工智能:线代方法》 第二部分问题求解 通过搜索进行问题求解(3)
    《人工智能:线代方法》第二部分问题求解通过搜索进行问题求解(3)3.5有信息(启发式)搜索策略3.5.1贪心最佳优先搜索3.5.2A*搜索3.5.3搜索......