File tree 2 files changed +95
-0
lines changed
0530-minimum-absolute-difference-in-bst
2 files changed +95
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 530. 二叉搜索树的最小绝对差
2
+
3
+ > 本文首发于公众号「图解面试算法」,是 [图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>) 系列文章之一。
4
+ >
5
+ > 同步博客:https://www.algomooc.com
6
+
7
+ 题目来源于 LeetCode 上 530. 二叉搜索树的最小绝对差. 是关于树的一道题。
8
+
9
+ ## 题目
10
+
11
+ 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
12
+
13
+ 示例:
14
+
15
+ ```
16
+ 输入:
17
+
18
+ 1
19
+ \
20
+ 3
21
+ /
22
+ 2
23
+
24
+ 输出:
25
+ 1
26
+
27
+ 解释:
28
+ 最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
29
+ ```
30
+
31
+ 提示:
32
+
33
+ 树中至少有 2 个节点。
34
+ 本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同
35
+
36
+
37
+
38
+ ## 题目解析
39
+
40
+ 计算树中任意两节点的差的绝对值的最小值,那么肯定是要遍历树,然后相邻节点求差对比是不是最小的。
41
+ 二叉树的遍历有三种,前序遍历,中序遍历,后序遍历。
42
+
43
+ 题目中给的是二叉搜索树,二叉搜索树有一个特色,就是中序遍历出来的结果,值是按照从小到大排列的。
44
+
45
+ 所以我们只要中序遍历,保存上一个节点,然后遍历的时候取得当前节点和上一个节点的值的绝对值,如果比当前最小差还要小,那么更新最小差。
46
+
47
+ 中序遍历是遍历左子树,然后根节点,最后是右子树,我们用递归去实现。
48
+
49
+ ## 动画理解
50
+
51
+
52
+ <video id="video" controls="" preload="none" >
53
+ <source id="mp4" src="../Animation/0530.m4v" type="video/mp4">
54
+ </video>
55
+
56
+ ## 参考代码
57
+
58
+
59
+ ```javaScript
60
+ /**
61
+ * Definition for a binary tree node.
62
+ * function TreeNode(val) {
63
+ * this.val = val;
64
+ * this.left = this.right = null;
65
+ * }
66
+ */
67
+ /**
68
+ * @param {TreeNode} root
69
+ * @return {number}
70
+ */
71
+ var getMinimumDifference = function(root) {
72
+ let min = Number.MAX_VALUE
73
+ let preNode = null
74
+ var travelTree = function (node) {
75
+ if (node) {
76
+ travelTree(node.left)
77
+ if(preNode) {
78
+ min = Math.min(min, Math.abs(preNode.val - node.val))
79
+ }
80
+ preNode = node
81
+ travelTree(node.right)
82
+ }
83
+ }
84
+ travelTree(root)
85
+ return min
86
+ };
87
+ ```
88
+
89
+ ## 复杂度分析
90
+
91
+ 时间复杂度:O(N),N为树中节点个数。
92
+
93
+ 空间复杂度:O(log(N))。
94
+
95
+ 
You can’t perform that action at this time.
0 commit comments