From b8df0bb2a8496cd7de8661f44f07dcde1f737047 Mon Sep 17 00:00:00 2001
From: Ole Martin Ruud
Date: Mon, 7 Jan 2019 04:24:27 +0100
Subject: [PATCH] Use pattern matching in tree traversal (Rust)
---
contents/tree_traversal/code/rust/tree.rs | 28 ++++++++++++++---------
contents/tree_traversal/tree_traversal.md | 8 +++----
2 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/contents/tree_traversal/code/rust/tree.rs b/contents/tree_traversal/code/rust/tree.rs
index 37d4d4f0c..319464fb8 100644
--- a/contents/tree_traversal/code/rust/tree.rs
+++ b/contents/tree_traversal/code/rust/tree.rs
@@ -23,17 +23,18 @@ fn dfs_recursive_postorder(n: &Node) {
}
fn dfs_recursive_inorder_btree(n: &Node) {
- if n.children.len() == 2{
- dfs_recursive_inorder_btree(&n.children[1]);
- println!("{}", n.value);
- dfs_recursive_inorder_btree(&n.children[0]);
- } else if n.children.len() == 1 {
- dfs_recursive_inorder_btree(&n.children[0]);
- println!("{}", n.value);
- } else if n.children.len() == 0 {
- println!("{}", n.value);
- } else {
- println!("This is not a binary tree.");
+ match &n.children[..] {
+ [left, right] => {
+ dfs_recursive_inorder_btree(left);
+ println!("{}", n.value);
+ dfs_recursive_inorder_btree(right);
+ }
+ [left] => {
+ dfs_recursive_inorder_btree(left);
+ println!("{}", n.value);
+ }
+ [] => println!("{}", n.value),
+ _ => println!("This is not a binary tree."),
}
}
@@ -70,14 +71,19 @@ fn create_tree(num_row: u64, num_child: u64) -> Node {
fn main() {
let root = create_tree(2, 3);
+
println!("Recursive DFS:");
dfs_recursive(&root);
+
println!("Stack DFS:");
dfs_stack(&root);
+
println!("Queue BFS:");
bfs_queue(&root);
+
println!("Recursive post-order DFS:");
dfs_recursive_postorder(&root);
+
println!("Recursive in-order DFS BTree:");
let root_binary = create_tree(3, 2);
dfs_recursive_inorder_btree(&root_binary);
diff --git a/contents/tree_traversal/tree_traversal.md b/contents/tree_traversal/tree_traversal.md
index 2864f512e..b922621f6 100644
--- a/contents/tree_traversal/tree_traversal.md
+++ b/contents/tree_traversal/tree_traversal.md
@@ -111,7 +111,7 @@ Now, in this case the first element searched through is still the root of the tr
{% sample lang="rs"%}
-[import:17-23, lang:"rust"](code/rust/tree.rs)
+[import:17-24, lang:"rust"](code/rust/tree.rs)
{% sample lang="hs"%}
[import:9-10, lang:"haskell"](code/haskell/TreeTraversal.hs)
{% sample lang="swift"%}
@@ -154,7 +154,7 @@ In this case, the first node visited is at the bottom of the tree and moves up t
{% sample lang="rs"%}
-[import:25-38, lang:"rust"](code/rust/tree.rs)
+[import:25-40, lang:"rust"](code/rust/tree.rs)
{% sample lang="hs"%}
[import:12-16, lang:"haskell"](code/haskell/TreeTraversal.hs)
{% sample lang="swift"%}
@@ -207,7 +207,7 @@ In code, it looks like this:
{% sample lang="rs"%}
-[import:40-47, lang:"rust"](code/rust/tree.rs)
+[import:41-48, lang:"rust"](code/rust/tree.rs)
{% sample lang="hs"%}
[import:18-22, lang:"haskell"](code/haskell/TreeTraversal.hs)
{% sample lang="swift"%}
@@ -252,7 +252,7 @@ And this is exactly what Breadth-First Search (BFS) does! On top of that, it can
{% sample lang="rs"%}
-[import:49-57, lang:"rust"](code/rust/tree.rs)
+[import:50-58, lang:"rust"](code/rust/tree.rs)
{% sample lang="hs"%}
[import:24-28, lang:"haskell"](code/haskell/TreeTraversal.hs)
{% sample lang="swift"%}