二叉搜索树的2层结点统计_LeetCode基础算法题第90篇:求二叉搜索树结点最小距离...

c2eb45b12dc417067d58a2f28126a553.png
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。 如果有任何问题可以在文章后评论或者私信给我我会持续分享下去,敬请您的关注。

LeetCode 783. 求二叉搜索树结点最小距离(Minimum Distance Between BST Nodes)

问题描述:

给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。

注:

  1. 二叉树的大小范围在 2 到 100。
  2. 二叉树总是有效的,每个节点的值都是整数,且不重复。

示例:

1ffa8a1dab3f559b9fe39762a89fdd25.png

C语言实现:

思路,分类处理:

我们知道BST的特点是中序遍历后可以生成一个有序列表,那么所谓的节点最小距离就是这个有序列表中每相邻的两个节点差的最小值。

所以很自然,我们通过对BST的中序遍历就可以解决这个问题。

代码如下:

bcda05b9c9e126dea1811a2495623176.png

这里需要理解遍历函数diff的后两个指针参数x和y的含义。

x是遍历过程中保持的前一个节点的值,我们以示例举例说明一下:

示例前序遍历的结果是[1,2,3,4,6],这个x在遍历的过程中依次就是1,2,3,4,6。

y是我们要返回的结果,这个很简单。

这两个参数在整个遍历的过程中不断更新的。

bbdef9a5418adf34d6019366cbb0beb1.png

python语言的实现:

python的实现和C语言的实现类似,由于我们传递给diff的参数在递归过程中要不断更新的,所以我们用一个数组来分别存放pre和min,最后返回arr[1]即min即可。

代码如下:

86c1dcce9f0e8e47a3f635d2644fe005.png
93fdad9cea4ab826303441bfc0a4a21c.png

Java语言的实现:

Java的实现和C语言的实现原理基本相同。只不过省略了辅助函数,pre和min作为类属性,然后直接实现minDiffInBST方法,但是其实没什么区别。

代码如下:

0ababb755a06af46d112c259ebf6e7bc.png
c8bed89c6ef23109977699c7eb9190ee.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值