Skip to content

Commit 02612f1

Browse files
authored
Merge pull request #41 from iwburns/iterators
Add Iterators
2 parents 47f6d0c + fcea716 commit 02612f1

File tree

8 files changed

+878
-43
lines changed

8 files changed

+878
-43
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "id_tree"
3-
version = "1.0.2"
3+
version = "1.1.0"
44
authors = ["Ian Burns <[email protected]>"]
55
description = "A library for creating and modifying Tree structures."
66
documentation = "https://docs.rs/id_tree"

examples/basic.rs

+7-20
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,17 @@ fn main() {
2121
tree.insert(Node::new(4), UnderNode(&child_id)).unwrap();
2222

2323
println!("Post-order:");
24-
print_post_order(&tree, &root_id);
25-
println!();
26-
27-
println!("Pre-order:");
28-
print_pre_order(&tree, &root_id);
29-
println!();
30-
}
31-
32-
fn print_pre_order(tree: &Tree<i32>, node_id: &NodeId) {
33-
let node_ref = tree.get(node_id).unwrap();
3424

35-
print!("{}, ", node_ref.data());
36-
37-
for child_id in node_ref.children() {
38-
print_pre_order(tree, &child_id);
25+
for node in tree.traverse_post_order(&root_id).unwrap() {
26+
print!("{}, ", node.data());
3927
}
40-
}
4128

42-
fn print_post_order(tree: &Tree<i32>, node_id: &NodeId) {
43-
let node_ref = tree.get(node_id).unwrap();
29+
println!();
30+
println!("Pre-order:");
4431

45-
for child_id in node_ref.children() {
46-
print_post_order(tree, &child_id);
32+
for node in tree.traverse_pre_order(&root_id).unwrap() {
33+
print!("{}, ", node.data());
4734
}
4835

49-
print!("{}, ", node_ref.data());
36+
println!();
5037
}

src/behaviors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::NodeId;
1+
use NodeId;
22

33
///
44
/// Describes the possible behaviors of the `Tree::remove_node` method.

src/lib.rs

+11-12
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,11 @@
3636
//! tree.insert(Node::new(3), UnderNode(&child_id)).unwrap();
3737
//! tree.insert(Node::new(4), UnderNode(&child_id)).unwrap();
3838
//!
39-
//! println!("Pre-order:");
40-
//! print_pre_order(&tree, &root_id);
41-
//! // results in the output "0, 1, 3, 4, 2, "
42-
//! }
43-
//!
44-
//! fn print_pre_order(tree: &Tree<i32>, node_id: &NodeId) {
45-
//! let node_ref = tree.get(node_id).unwrap();
46-
//!
47-
//! print!("{}, ", node_ref.data());
48-
//!
49-
//! for child_id in node_ref.children() {
50-
//! print_pre_order(tree, &child_id);
39+
//! println!("Post-order:");
40+
//! for node in tree.traverse_pre_order(&root_id).unwrap() {
41+
//! print!("{}, ", node.data());
5142
//! }
43+
//! // results in the output "0, 1, 3, 4, 2, "
5244
//! }
5345
//! ```
5446
//!
@@ -90,6 +82,13 @@ pub use node::NodeBuilder;
9082
pub use node::Node;
9183
pub use tree::TreeBuilder;
9284
pub use tree::Tree;
85+
pub use tree::iterators::Ancestors;
86+
pub use tree::iterators::AncestorIds;
87+
pub use tree::iterators::Children;
88+
pub use tree::iterators::ChildrenIds;
89+
pub use tree::iterators::PreOrderTraversal;
90+
pub use tree::iterators::PostOrderTraversal;
91+
pub use tree::iterators::LevelOrderTraversal;
9392

9493
///
9594
/// An identifier used to differentiate between `Node`s within a `Tree`.

src/node.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use super::NodeId;
2-
use super::MutableNode;
1+
use NodeId;
2+
use MutableNode;
33

44
///
55
/// A `Node` builder that provides more control over how a `Node` is created.

0 commit comments

Comments
 (0)