Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.96 KB | None | 0 0
  1. enum Node {
  2.  Branch(Tree),
  3.  Leaf(String)
  4. }
  5.  
  6. struct Tree {
  7.   left: Vec<Node>,
  8.   right: Vec<Node>
  9. }
  10.  
  11. impl Tree {
  12.   pub fn names(&self) -> Vec<&str> {
  13.     let mut name_strs = Vec::new();
  14.     for node in (&self.left).iter().chain((&self.right).iter()) {
  15.         match node {
  16.             Node::Branch(t) => name_strs.extend(t.names()),
  17.             Node::Leaf(s) => name_strs.push(s)
  18.         }
  19.     }
  20.     name_strs
  21.   }
  22. }
  23.  
  24. #[cfg(test)]
  25. mod tests {
  26.     use super::{Tree,Node};
  27.     #[test]
  28.     fn test_names() {
  29.         let test_tree = Tree{
  30.             left: vec![Node::Branch(Tree{left: vec![Node::Leaf("H".to_string()), Node::Leaf("e".to_string())], right: vec![Node::Leaf("ll".to_string()), Node::Leaf("o".to_string())]}),
  31.                    Node::Branch(Tree{left: vec![Node::Leaf(", ".to_string()), Node::Leaf("W".to_string())], right: vec![]})],
  32.             right: vec![Node::Branch(Tree{left: vec![Node::Leaf("orld!".to_string())], right: vec![]})]
  33.         };
  34.         assert_eq!(test_tree.names(), vec!["H", "e", "ll", "o", ", ", "W", "orld!"]);
  35.     }
  36.  
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement