-
Notifications
You must be signed in to change notification settings - Fork 156
/
Copy pathminimum-distance-between-bst-nodes.js
99 lines (86 loc) · 1.84 KB
/
minimum-distance-between-bst-nodes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
* Minimum Distance Between BST Nodes
*
* Given a Binary Search Tree (BST) with the root node root,
* return the minimum difference between the values of any two different nodes in the tree.
*
* Example :
*
* Input: root = [4,2,6,1,3,null,null]
* Output: 1
* Explanation:
* Note that root is a TreeNode object, not an array.
*
* The given tree [4,2,6,1,3,null,null] is represented by the following diagram:
*
* 4
* / \
* 2 6
* / \
* 1 3
*
* while the minimum difference in this tree is 1,
* it occurs between node 1 and node 2, also between node 3 and node 2.
*
* Note:
*
* - The size of the BST will be between 2 and 100.
* - The BST is always valid, each node's value is an integer, and each node's value is different.
*/
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* Iterative Solution
*
* @param {TreeNode} root
* @return {number}
*/
const minDiffInBST_I = root => {
const stack = [];
let curr = root;
let prev = null;
let min = Infinity;
while (stack.length || curr) {
if (curr) {
stack.push(curr);
curr = curr.left;
} else {
curr = stack.pop();
if (prev) {
min = Math.min(min, Math.abs(curr.val - prev.val));
}
prev = curr;
curr = curr.right;
}
}
return min;
};
/**
* Recursive Solution
*
* @param {TreeNode} root
* @return {number}
*/
const minDiffInBST_II = root => {
let prev = null;
let min = Infinity;
const inorder = curr => {
if (!curr) {
return;
}
inorder(curr.left);
if (prev) {
min = Math.min(min, Math.abs(curr.val - prev.val));
}
prev = curr;
inorder(curr.right);
};
inorder(root);
return min;
};
export { minDiffInBST_I, minDiffInBST_II };