#tree-traversal #tree #algorithm #iterator #hobby #node #content

itertree

使用迭代器进行树遍历的实验性项目

1 个不稳定版本

0.0.3 2021年5月8日

#8#hobby

自定义许可

8KB
192

itertree-rs

探索使用迭代器在Rust中进行树遍历的业余项目

演示

use itertree;
// Each row is 
// [node idx, <left child idx>, <right child idx>, <contents>]
// In the example below, the `contents` is simply the node index
// itself, for simplicity.
// The visual representation of this tree:
// 
//          1
//         / \
//        /   \
//       /     \
//      2       3
//     / \     /
//    4   5   6
//   /       / \
//  7       8   9
//
let tree_definition = [
    (1, 2, 3, 1),
    (2, 4, 5, 2),
    (3, 6, -1, 3),
    (4, 7, -1, 4),
    (5, -1, -1, 5),
    (6, 8, 9, 6),
    (7, -1, -1, 7),
    (8, -1, -1, 8),
    (9, -1, -1, 9)
];
let tree = itertree::Node::new(&tree_definition);

let order = itertree::TraversalOrder::PreOrder;
let visited: Vec<_> = tree.iter(order).map(|n| *n.contents).collect();
println!("{:?}", &visited);
// [1, 2, 4, 7, 5, 3, 6, 8, 9]

let order = itertree::TraversalOrder::InOrder;
let visited: Vec<_> = tree.iter(order).map(|n| *n.contents).collect();
println!("{:?}", &visited);
// [7, 4, 2, 5, 1, 8, 6, 9, 3]

let order = itertree::TraversalOrder::PostOrder;
let visited: Vec<_> = tree.iter(order).map(|n| *n.contents).collect();
println!("{:?}", &visited);
// [7, 4, 5, 2, 8, 9, 6, 3, 1]

致谢

我的资源来源于Rosetta Code上的这个页面维基百科上的这个页面,以及与Rust编译器的大量头脑风暴。

无运行时依赖