Skip to content

Commit eede940

Browse files
committed
Create: minimum-distance-between-two-bst-nodes
1 parent ee7a3bc commit eede940

4 files changed

+138
-0
lines changed

Diff for: go/minimum-distance-between-two-bst-nodes.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package main
2+
3+
import "math"
4+
5+
func main() {
6+
7+
}
8+
9+
type TreeNode struct {
10+
Val int
11+
Left *TreeNode
12+
Right *TreeNode
13+
}
14+
15+
func minDiffInBST(root *TreeNode) int {
16+
var prev *TreeNode
17+
res := math.MaxInt
18+
19+
var dfs func(*TreeNode)
20+
21+
dfs = func(node *TreeNode) {
22+
if node != nil {
23+
dfs(node.Left)
24+
25+
if prev != nil {
26+
res = min(res, node.Val-prev.Val)
27+
}
28+
prev = node
29+
30+
dfs(node.Right)
31+
}
32+
}
33+
34+
dfs(root)
35+
return res
36+
}
37+
38+
func min(a, b int) int {
39+
if a < b {
40+
return a
41+
}
42+
return b
43+
}

Diff for: javascript/minimum-distance-between-two-bst-nodes.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {number}
12+
*/
13+
var minDiffInBST = function (root) {
14+
let [prev, res] = [null, Number.MAX_VALUE];
15+
16+
function dfs(node) {
17+
if (node) {
18+
dfs(node.left);
19+
20+
if (prev) {
21+
res = Math.min(res, node.val - prev.val);
22+
}
23+
prev = node;
24+
25+
dfs(node.right);
26+
}
27+
}
28+
29+
dfs(root);
30+
31+
return res;
32+
};

Diff for: rust/minimum-distance-between-two-bst-nodes.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use std::cell::RefCell;
2+
use std::rc::Rc;
3+
4+
type OptNode = Option<Rc<RefCell<TreeNode>>>;
5+
6+
impl Solution {
7+
pub fn min_diff_in_bst(root: OptNode) -> i32 {
8+
let mut min = i32::MAX;
9+
let mut prev = None;
10+
11+
Self::dfs(root, &mut prev, &mut min);
12+
min
13+
}
14+
15+
fn dfs(root: Option<Rc<RefCell<TreeNode>>>, prev: &mut Option<i32>, min: &mut i32) {
16+
if let Some(node) = root {
17+
let node = node.borrow();
18+
19+
Self::dfs(node.left.clone(), prev, min);
20+
21+
if let Some(prev) = prev {
22+
*min = (*min).min(node.val - *prev)
23+
}
24+
*prev = Some(node.val);
25+
26+
Self::dfs(node.right.clone(), prev, min);
27+
}
28+
}
29+
}
30+

Diff for: typescript/minimum-distance-between-two-bst-nodes.ts

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class TreeNode {
2+
val: number;
3+
left: TreeNode | null;
4+
right: TreeNode | null;
5+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
this.val = val === undefined ? 0 : val;
7+
this.left = left === undefined ? null : left;
8+
this.right = right === undefined ? null : right;
9+
}
10+
}
11+
12+
export {};
13+
14+
function minDiffInBST(root: TreeNode | null): number {
15+
let prev: TreeNode | null = null;
16+
let res = Number.MAX_VALUE;
17+
18+
function dfs(node: TreeNode | null): void {
19+
if (node) {
20+
dfs(node.left);
21+
22+
if (prev) {
23+
res = Math.min(res, node.val - prev.val);
24+
}
25+
prev = node;
26+
27+
dfs(node.right);
28+
}
29+
}
30+
31+
dfs(root);
32+
return res;
33+
}

0 commit comments

Comments
 (0)