mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
更新0530.二叉搜索树的最小绝对差
This commit is contained in:
@ -9,7 +9,7 @@
|
||||
|
||||
> 利用二叉搜索树的特性搞起!
|
||||
|
||||
## 530.二叉搜索树的最小绝对差
|
||||
# 530.二叉搜索树的最小绝对差
|
||||
|
||||
题目地址:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
提示:树中至少有 2 个节点。
|
||||
|
||||
## 思路
|
||||
# 思路
|
||||
|
||||
题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。
|
||||
|
||||
@ -101,7 +101,7 @@ public:
|
||||
|
||||
## 迭代
|
||||
|
||||
看过这两篇[二叉树:听说递归能做的,栈也能做!](https://mp.weixin.qq.com/s/c_zCrGHIVlBjUH_hJtghCg),[二叉树:前中后序迭代方式的写法就不能统一一下么?](https://mp.weixin.qq.com/s/WKg0Ty1_3SZkztpHubZPRg)文章之后,不难写出两种中序遍历的迭代法。
|
||||
看过这两篇[二叉树:听说递归能做的,栈也能做!](https://mp.weixin.qq.com/s/OH7aCVJ5-Gi32PkNCoZk4A),[二叉树:前中后序迭代方式统一写法](https://mp.weixin.qq.com/s/ATQMPCpBlaAgrqdLDMVPZA)文章之后,不难写出两种中序遍历的迭代法。
|
||||
|
||||
下面我给出其中的一种中序遍历的迭代法,代码如下:
|
||||
|
||||
@ -132,7 +132,7 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
## 总结
|
||||
# 总结
|
||||
|
||||
**遇到在二叉搜索树上求什么最值,求差值之类的,都要思考一下二叉搜索树可是有序的,要利用好这一特点。**
|
||||
|
||||
@ -142,15 +142,11 @@ public:
|
||||
|
||||
|
||||
|
||||
# 其他语言版本
|
||||
|
||||
|
||||
## Java
|
||||
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
||||
Java:
|
||||
递归
|
||||
```java
|
||||
class Solution {
|
||||
@ -175,38 +171,11 @@ class Solution {
|
||||
}
|
||||
}
|
||||
```
|
||||
```Java
|
||||
class Solution {
|
||||
TreeNode pre;// 记录上一个遍历的结点
|
||||
int result = Integer.MAX_VALUE;
|
||||
public int getMinimumDifference(TreeNode root) {
|
||||
if (root == null) {
|
||||
return result;
|
||||
}
|
||||
// 左
|
||||
int left = getMinimumDifference(root.left);
|
||||
|
||||
// 中
|
||||
if (pre != null) {
|
||||
result = Math.min(left, root.val - pre.val);
|
||||
}
|
||||
pre = root;
|
||||
// 右
|
||||
int right = getMinimumDifference(root.right);
|
||||
result = Math.min(right, result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
```
|
||||
## Python
|
||||
|
||||
Python:
|
||||
递归
|
||||
```python
|
||||
# Definition for a binary tree node.
|
||||
# class TreeNode:
|
||||
# def __init__(self, val=0, left=None, right=None):
|
||||
# self.val = val
|
||||
# self.left = left
|
||||
# self.right = right
|
||||
class Solution:
|
||||
def getMinimumDifference(self, root: TreeNode) -> int:
|
||||
res = []
|
||||
@ -222,8 +191,10 @@ class Solution:
|
||||
for i in range(len(res)-1): // 统计有序数组的最小差值
|
||||
r = min(abs(res[i]-res[i+1]),r)
|
||||
return r
|
||||
```
|
||||
|
||||
# 迭代法-中序遍历
|
||||
迭代法-中序遍历
|
||||
```python
|
||||
class Solution:
|
||||
def getMinimumDifference(self, root: TreeNode) -> int:
|
||||
stack = []
|
||||
@ -243,18 +214,12 @@ class Solution:
|
||||
return result
|
||||
|
||||
```
|
||||
Go:
|
||||
> 中序遍历,然后计算最小差值
|
||||
|
||||
## Go:
|
||||
|
||||
中序遍历,然后计算最小差值
|
||||
|
||||
```go
|
||||
/**
|
||||
* Definition for a binary tree node.
|
||||
* type TreeNode struct {
|
||||
* Val int
|
||||
* Left *TreeNode
|
||||
* Right *TreeNode
|
||||
* }
|
||||
*/
|
||||
func getMinimumDifference(root *TreeNode) int {
|
||||
var res []int
|
||||
findMIn(root,&res)
|
||||
@ -299,7 +264,7 @@ func getMinimumDifference(root *TreeNode) int {
|
||||
}
|
||||
```
|
||||
|
||||
JavaScript版本
|
||||
## JavaScript
|
||||
|
||||
```javascript
|
||||
/**
|
||||
|
Reference in New Issue
Block a user