Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum Node {
- Branch(Tree),
- Leaf(String)
- }
- struct Tree {
- left: Vec<Node>,
- right: Vec<Node>
- }
- impl Tree {
- pub fn names(&self) -> Vec<&str> {
- let mut name_strs = Vec::new();
- for node in (&self.left).iter().chain((&self.right).iter()) {
- match node {
- Node::Branch(t) => name_strs.extend(t.names()),
- Node::Leaf(s) => name_strs.push(s)
- }
- }
- name_strs
- }
- }
- #[cfg(test)]
- mod tests {
- use super::{Tree,Node};
- #[test]
- fn test_names() {
- let test_tree = Tree{
- 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())]}),
- Node::Branch(Tree{left: vec![Node::Leaf(", ".to_string()), Node::Leaf("W".to_string())], right: vec![]})],
- right: vec![Node::Branch(Tree{left: vec![Node::Leaf("orld!".to_string())], right: vec![]})]
- };
- assert_eq!(test_tree.names(), vec!["H", "e", "ll", "o", ", ", "W", "orld!"]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement