1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-01-18 20:39:35 +02:00

Use cmp + match in binary tree example (#1587)

Currently, the implementation uses if-then-else chains and `<` and `>`.
This is not the most idiomatic Rust. Instead, we can use `cmp` and
`match` to make the code easier to read.

---------

Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
This commit is contained in:
Martin Huschenbett 2023-12-13 19:39:23 +01:00 committed by GitHub
parent f37aeac3ca
commit ee826ef742
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,6 +13,8 @@
// limitations under the License.
// ANCHOR: solution
use std::cmp::Ordering;
// ANCHOR: types
#[derive(Debug)]
struct BinaryTreeNode<T: Ord + Copy> {
@ -42,28 +44,22 @@ impl<T: Ord + Copy> BinaryTree<T> {
right: BinaryTree::new(),
}));
}
Some(n) => {
if value < n.value {
n.left.insert(value);
} else if value > n.value {
n.right.insert(value);
}
}
Some(n) => match value.cmp(&n.value) {
Ordering::Less => n.left.insert(value),
Ordering::Equal => {}
Ordering::Greater => n.right.insert(value),
},
}
}
fn has(&self, value: T) -> bool {
match &self.0 {
None => false,
Some(n) => {
if value == n.value {
true
} else if value < n.value {
n.left.has(value)
} else {
n.right.has(value)
}
}
Some(n) => match value.cmp(&n.value) {
Ordering::Less => n.left.has(value),
Ordering::Equal => true,
Ordering::Greater => n.right.has(value),
},
}
}