首页 > 编程语言 >代码随想录算法训练营第二十天 | 236. 二叉树的最近公共祖先 , 501.二叉搜索树中的众数 , 530.二叉搜索树的最小绝对差

代码随想录算法训练营第二十天 | 236. 二叉树的最近公共祖先 , 501.二叉搜索树中的众数 , 530.二叉搜索树的最小绝对差

时间:2024-02-18 18:22:21浏览次数:28  
标签:node TreeNode 树中 随想录 二叉 搜索 return root 节点

 

 

530. 二叉搜索树的最小绝对差

  已解答 简单  

相关标签

相关企业  

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

 

示例 1:

输入:root = [4,2,6,1,3]
输出:1

示例 2:

输入:root = [1,0,48,null,null,12,49]
输出:1

 

提示:

  • 树中节点的数目范围是 [2, 104]
  • 0 <= Node.val <= 105

func getMinimumDifference(root *TreeNode) int { minDiff := math.MaxInt var pre *TreeNode var inorder func(node*TreeNode) inorder = func(node *TreeNode) { if node == nil { return } inorder(node.Left) if pre != nil { if minDiff > abs(node.Val-pre.Val) { minDiff = abs(node.Val - pre.Val) } } pre = node inorder(node.Right) } inorder(root) return minDiff }

 

func abs(value int) int { if value < 0 { return 0 - value } return value }

 


501. 二叉搜索树中的众数

  已解答 简单  

相关标签

相关企业  

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

 

示例 1:

输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

 

提示:

  • 树中节点的数目在范围 [1, 104] 内
  • -105 <= Node.val <= 105

 

进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)


/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func findMode(root *TreeNode) []int { varres []int varmaxCountint varcurCountint varpre *TreeNode vardfsfunc(node *TreeNode) dfs = func(node *TreeNode) { if node == nil { return } dfs(node.Left) if pre == nil { curCount = 1 } else { if node.Val == pre.Val { curCount++ } else { curCount = 1 } } if curCount == maxCount { res = append(res, node.Val) } if curCount > maxCount { maxCount = curCount res = []int{node.Val} } pre = node dfs(node.Right) } dfs(root) return res }

236. 二叉树的最近公共祖先

  已解答 中等  

相关标签

相关企业  

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

 

示例 1:

输入:输出:解释:
5 
1 
3 。

示例 2:

输入:输出:解释:
5 
4 
5 。

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

 

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。

 

 


func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode { if root == nil { returnnil } if root == p || root == q { return root } leftPoint := lowestCommonAncestor(root.Left, p, q) rightPoint := lowestCommonAncestor(root.Right, p, q) if leftPoint != nil && rightPoint != nil { return root } if leftPoint != nil { return leftPoint } return rightPoint }

标签:node,TreeNode,树中,随想录,二叉,搜索,return,root,节点
From: https://www.cnblogs.com/suxinmian/p/18019759

相关文章

  • 「力扣」104. 二叉树的最大深度
    「力扣」104.二叉树的最大深度题目描述给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2提示:树中节点的数量在[0,10......
  • 代码随想录算法训练营第十九天 | 98.验证二叉搜索树, 700.二叉搜索树中的搜索,617.合并
     654.最大二叉树 已解答中等 相关标签相关企业 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树......
  • Go语言指南练习:等价二叉查找树
    题目:不同二叉树的叶节点上可以保存相同的值序列。例如,以下两个二叉树都保存了序列1,1,2,3,5,8,13。在大多数语言中,检查两个二叉树是否保存了相同序列的函数都相当复杂。我们将使用Go的并发和信道来编写一个简单的解法。本例使用了tree包,它定义了类型:typeTreestruct{Lef......
  • 代码随想录算法训练营第十八天 | 112. 路径总和,113. 路径总和ii ,106.从中序与后序遍
     513.找树左下角的值 已解答中等 相关标签相关企业 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层最左边 节点的值。假设二叉树中至少有一个节点。 示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,n......
  • day28 回溯算法part4 代码随想录算法训练营 78. 子集
    题目:78.子集我的感悟:看见弹幕是秒了,我有点不敢相信,自己试了试,没有通过,再看了一眼文字讲解。感觉懂了点理解难点:这题可以没有终止条件,开始我就疑惑这个终止条件怎么写注意这个nums[i]要添加进入是可以不写终止的,不会出现无线递归的,因为是从i+1开始,那会不会越界??,不会,最......
  • day28 回溯算法part4 代码随想录算法训练营 93. 复原 IP 地址
    题目:93.复原IP地址我的感悟:加油!理解难点:开始没理解,start_index的含义start_index是切割后的位置信息。代码难点:代码示例:fromtypingimportListclassSolution:defrestoreIpAddresses(self,s:str)->List[str]:#找3个分割点?#最后......
  • 算法入门:搜索算法
    文章目录1.二分查找2.深度优先搜索(DFS)3.广度优先搜索(BFS)4.DFS与BFS区别 1.二分查找思想:二分查找是一种高效的查找算法,它基于分治思想,适用于已排序的数组。确定搜索范围:首先确定整个数组的搜索范围,通常是从数组的起始位置到结束位置。计算中间位置:计算搜索范围的中......
  • DFS(深度优先搜索)
    DFS(深度优先搜索)顾名思义,深度优先搜索,即搜索的一种;在搜索时,优先向下一深度搜索,可以称作回溯法。主要实现方法是依靠递归函数;样例若使用DFS的搜索方法;在下图树各点中的遍历方法为:0->1->3->5->3->6->3->1->4->7->9->7->4->1->0......
  • 力扣 深度优先搜索 199. 二叉树的右视图
    /** *Definitionforabinarytreenode. *publicclassTreeNode{ *  intval; *  TreeNodeleft; *  TreeNoderight; *  TreeNode(){} *  TreeNode(intval){this.val=val;} *  TreeNode(intval,TreeNodeleft,Tr......
  • 代码随想录 day53 买卖股票的最佳时机
    买卖股票的最佳时机这里可以用贪心的思路因为只需要买卖各一次股票所以找到最大最小值算区间差也可以这里用dpdp[i][0]表示持股的收益dp[i][1]表示不持股的收益各自各有一种情况是维持原状还有一种就是持股卖出或者不持股买入取max就可以这里用了两个单位的数组只......