|
|
@ -12,7 +12,7 @@
|
|
|
|
//! as **ownership**, **borrowing**, **generics** and **lifetimes**. I cannot promise that the implementations are
|
|
|
|
//! as **ownership**, **borrowing**, **generics** and **lifetimes**. I cannot promise that the implementations are
|
|
|
|
//! particularly efficient, or if they are, it was not at the forefront of my mind.
|
|
|
|
//! particularly efficient, or if they are, it was not at the forefront of my mind.
|
|
|
|
//!
|
|
|
|
//!
|
|
|
|
//! That being said, there are some areas I would love to improve upon/include:
|
|
|
|
//! That being said, there are some areas I would love to improve upon which include:
|
|
|
|
//! - Write idiomatic code.
|
|
|
|
//! - Write idiomatic code.
|
|
|
|
//! - Effectively use **macro_rules!** to reduce large portions of repetitive code.
|
|
|
|
//! - Effectively use **macro_rules!** to reduce large portions of repetitive code.
|
|
|
|
//! - Implement a **pretty_print()** function to display the binary search trees nicely.
|
|
|
|
//! - Implement a **pretty_print()** function to display the binary search trees nicely.
|
|
|
@ -236,7 +236,7 @@ pub trait BinarySearchTree<T: Ord> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [in_order_vec](Self::in_order_vec()) as the underlying
|
|
|
|
/// This function is analogous to [in_order_vec](Self::in_order_vec()) as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
fn asc_order_vec(&self) -> Vec<&T>;
|
|
|
|
fn asc_order_vec(&self) -> Vec<&T>;
|
|
|
|
|
|
|
|
|
|
|
@ -259,7 +259,7 @@ pub trait BinarySearchTree<T: Ord> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [asc_order_vec](Self::asc_order_vec()) as the underlying
|
|
|
|
/// This function is analogous to [asc_order_vec](Self::asc_order_vec()) as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -309,7 +309,7 @@ pub trait BinarySearchTree<T: Ord> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [in_order_iter](Self::in_order_iter()) as the underlying
|
|
|
|
/// This function is analogous to [in_order_iter](Self::in_order_iter()) as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
fn asc_order_iter(&self) -> IntoIter<&T>;
|
|
|
|
fn asc_order_iter(&self) -> IntoIter<&T>;
|
|
|
|
|
|
|
|
|
|
|
@ -320,7 +320,7 @@ pub trait BinarySearchTree<T: Ord> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [asc_order_iter](Self::asc_order_iter()) as the underlying
|
|
|
|
/// This function is analogous to [asc_order_iter](Self::asc_order_iter()) as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
fn in_order_iter(&self) -> IntoIter<&T>;
|
|
|
|
fn in_order_iter(&self) -> IntoIter<&T>;
|
|
|
|
|
|
|
|
|
|
|
@ -334,7 +334,7 @@ pub trait BinarySearchTree<T: Ord> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [into_in_order_iter](Self::into_in_order_iter()) as the
|
|
|
|
/// This function is analogous to [into_in_order_iter](Self::into_in_order_iter()) as the
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
fn into_asc_order_iter(self) -> IntoIter<T>;
|
|
|
|
fn into_asc_order_iter(self) -> IntoIter<T>;
|
|
|
|
|
|
|
|
|
|
|
@ -345,7 +345,7 @@ pub trait BinarySearchTree<T: Ord> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [into_asc_order_iter](Self::into_asc_order_iter()) as the
|
|
|
|
/// This function is analogous to [into_asc_order_iter](Self::into_asc_order_iter()) as the
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
fn into_in_order_iter(self) -> IntoIter<T>;
|
|
|
|
fn into_in_order_iter(self) -> IntoIter<T>;
|
|
|
|
|
|
|
|
|
|
|
@ -767,7 +767,7 @@ impl<T: Ord> BinarySearchTree<T> for IterativeBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [IterativeBST::in_order_vec()] as the underlying
|
|
|
|
/// This function is analogous to [IterativeBST::in_order_vec()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -823,7 +823,7 @@ impl<T: Ord> BinarySearchTree<T> for IterativeBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [IterativeBST::asc_order_vec()] as the underlying
|
|
|
|
/// This function is analogous to [IterativeBST::asc_order_vec()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -915,7 +915,7 @@ impl<T: Ord> BinarySearchTree<T> for IterativeBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [IterativeBST::in_order_iter()] as the underlying
|
|
|
|
/// This function is analogous to [IterativeBST::in_order_iter()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -974,7 +974,7 @@ impl<T: Ord> BinarySearchTree<T> for IterativeBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [IterativeBST::asc_order_iter()] as the underlying
|
|
|
|
/// This function is analogous to [IterativeBST::asc_order_iter()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1060,7 +1060,7 @@ impl<T: Ord> BinarySearchTree<T> for IterativeBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [IterativeBST::into_in_order_iter()] as the
|
|
|
|
/// This function is analogous to [IterativeBST::into_in_order_iter()] as the
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1123,7 +1123,7 @@ impl<T: Ord> BinarySearchTree<T> for IterativeBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [IterativeBST::asc_order_iter()] as the
|
|
|
|
/// This function is analogous to [IterativeBST::asc_order_iter()] as the
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1630,7 +1630,7 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [RecursiveBST::in_order_vec()] as the underlying
|
|
|
|
/// This function is analogous to [RecursiveBST::in_order_vec()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1690,7 +1690,7 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [RecursiveBST::asc_order_vec()] as the underlying
|
|
|
|
/// This function is analogous to [RecursiveBST::asc_order_vec()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1788,7 +1788,7 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [RecursiveBST::in_order_iter()] as the underlying
|
|
|
|
/// This function is analogous to [RecursiveBST::in_order_iter()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1851,7 +1851,7 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [RecursiveBST::asc_order_iter()] as the underlying
|
|
|
|
/// This function is analogous to [RecursiveBST::asc_order_iter()] as the underlying
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
/// behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -1943,7 +1943,7 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [RecursiveBST::into_in_order_iter()] as the
|
|
|
|
/// This function is analogous to [RecursiveBST::into_in_order_iter()] as the
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -2008,7 +2008,7 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Important
|
|
|
|
/// # Important
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// This is function is analogous to [RecursiveBST::asc_order_iter()] as the
|
|
|
|
/// This function is analogous to [RecursiveBST::asc_order_iter()] as the
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
/// underlying behaviour is **_exactly the same_.**
|
|
|
|
///
|
|
|
|
///
|
|
|
|
/// # Example
|
|
|
|
/// # Example
|
|
|
@ -2101,4 +2101,4 @@ impl<T: Ord> BinarySearchTree<T> for RecursiveBST<T> {
|
|
|
|
Node::recursive_consume_level_order_vec(self.root, &mut elements);
|
|
|
|
Node::recursive_consume_level_order_vec(self.root, &mut elements);
|
|
|
|
elements.into_iter()
|
|
|
|
elements.into_iter()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|