From 5797dbd828eed41d33bd56ac9fae379260420276 Mon Sep 17 00:00:00 2001 From: Michael Xu Date: Fri, 28 Jul 2023 23:12:33 +0800 Subject: [PATCH] feat: add rust solution to lc problem: No.0530 --- .../README.md | 49 +++++++++++++++++++ .../README_EN.md | 49 +++++++++++++++++++ .../Solution.rs | 44 +++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 solution/0500-0599/0530.Minimum Absolute Difference in BST/Solution.rs diff --git a/solution/0500-0599/0530.Minimum Absolute Difference in BST/README.md b/solution/0500-0599/0530.Minimum Absolute Difference in BST/README.md index 235ac684f2cb2..7a3f9dc1e1ea3 100644 --- a/solution/0500-0599/0530.Minimum Absolute Difference in BST/README.md +++ b/solution/0500-0599/0530.Minimum Absolute Difference in BST/README.md @@ -156,6 +156,55 @@ public: }; ``` +### **Rust** + +```rust +// Definition for a binary tree node. +// #[derive(Debug, PartialEq, Eq)] +// pub struct TreeNode { +// pub val: i32, +// pub left: Option>>, +// pub right: Option>>, +// } +// +// impl TreeNode { +// #[inline] +// pub fn new(val: i32) -> Self { +// TreeNode { +// val, +// left: None, +// right: None +// } +// } +// } +use std::rc::Rc; +use std::cell::RefCell; +impl Solution { + #[allow(dead_code)] + pub fn get_minimum_difference(root: Option>>) -> i32 { + let mut ret = i32::MAX; + let mut prev = i32::MAX; + Self::traverse(root, &mut prev, &mut ret); + ret + } + + #[allow(dead_code)] + fn traverse(root: Option>>, prev: &mut i32, ans: &mut i32) { + let left = root.as_ref().unwrap().borrow().left.clone(); + let right = root.as_ref().unwrap().borrow().right.clone(); + let val = root.as_ref().unwrap().borrow().val; + if !left.is_none() { + Self::traverse(left.clone(), prev, ans); + } + *ans = std::cmp::min(*ans, (*prev - val).abs()); + *prev = val; + if !right.is_none() { + Self::traverse(right.clone(), prev, ans); + } + } +} +``` + ### **Go** ```go diff --git a/solution/0500-0599/0530.Minimum Absolute Difference in BST/README_EN.md b/solution/0500-0599/0530.Minimum Absolute Difference in BST/README_EN.md index 32f70d6c840b2..3b8d6f70b1b71 100644 --- a/solution/0500-0599/0530.Minimum Absolute Difference in BST/README_EN.md +++ b/solution/0500-0599/0530.Minimum Absolute Difference in BST/README_EN.md @@ -139,6 +139,55 @@ public: }; ``` +### **Rust** + +```rust +// Definition for a binary tree node. +// #[derive(Debug, PartialEq, Eq)] +// pub struct TreeNode { +// pub val: i32, +// pub left: Option>>, +// pub right: Option>>, +// } +// +// impl TreeNode { +// #[inline] +// pub fn new(val: i32) -> Self { +// TreeNode { +// val, +// left: None, +// right: None +// } +// } +// } +use std::rc::Rc; +use std::cell::RefCell; +impl Solution { + #[allow(dead_code)] + pub fn get_minimum_difference(root: Option>>) -> i32 { + let mut ret = i32::MAX; + let mut prev = i32::MAX; + Self::traverse(root, &mut prev, &mut ret); + ret + } + + #[allow(dead_code)] + fn traverse(root: Option>>, prev: &mut i32, ans: &mut i32) { + let left = root.as_ref().unwrap().borrow().left.clone(); + let right = root.as_ref().unwrap().borrow().right.clone(); + let val = root.as_ref().unwrap().borrow().val; + if !left.is_none() { + Self::traverse(left.clone(), prev, ans); + } + *ans = std::cmp::min(*ans, (*prev - val).abs()); + *prev = val; + if !right.is_none() { + Self::traverse(right.clone(), prev, ans); + } + } +} +``` + ### **Go** ```go diff --git a/solution/0500-0599/0530.Minimum Absolute Difference in BST/Solution.rs b/solution/0500-0599/0530.Minimum Absolute Difference in BST/Solution.rs new file mode 100644 index 0000000000000..cf47bfcad27bb --- /dev/null +++ b/solution/0500-0599/0530.Minimum Absolute Difference in BST/Solution.rs @@ -0,0 +1,44 @@ +// Definition for a binary tree node. +// #[derive(Debug, PartialEq, Eq)] +// pub struct TreeNode { +// pub val: i32, +// pub left: Option>>, +// pub right: Option>>, +// } +// +// impl TreeNode { +// #[inline] +// pub fn new(val: i32) -> Self { +// TreeNode { +// val, +// left: None, +// right: None +// } +// } +// } +use std::rc::Rc; +use std::cell::RefCell; +impl Solution { + #[allow(dead_code)] + pub fn get_minimum_difference(root: Option>>) -> i32 { + let mut ret = i32::MAX; + let mut prev = i32::MAX; + Self::traverse(root, &mut prev, &mut ret); + ret + } + + #[allow(dead_code)] + fn traverse(root: Option>>, prev: &mut i32, ans: &mut i32) { + let left = root.as_ref().unwrap().borrow().left.clone(); + let right = root.as_ref().unwrap().borrow().right.clone(); + let val = root.as_ref().unwrap().borrow().val; + if !left.is_none() { + Self::traverse(left.clone(), prev, ans); + } + *ans = std::cmp::min(*ans, (*prev - val).abs()); + *prev = val; + if !right.is_none() { + Self::traverse(right.clone(), prev, ans); + } + } +} \ No newline at end of file