use clap::Parser;
use tskit::prelude::*;
fn traverse_upwards(tree: &tskit::Tree) {
for &s in tree.sample_nodes() {
let mut u = s;
while u != tskit::NodeId::NULL {
u = tree.parent(u).unwrap();
}
}
}
fn traverse_upwards_with_iterator(tree: &tskit::Tree) {
for &s in tree.sample_nodes() {
let _steps_to_root = tree.parents(s).count();
}
}
fn preorder_traversal(tree: &tskit::Tree) {
for _ in tree.traverse_nodes(tskit::NodeTraversalOrder::Preorder) {}
}
#[derive(clap::Parser)]
struct Params {
#[clap(short = 't', long = "treefile", value_parser, help = "Tree file name")]
treefile: String,
}
fn main() {
let params = Params::parse();
let treeseq = tskit::TreeSequence::load(params.treefile).unwrap();
let mut tree_iterator = treeseq.tree_iterator(tskit::TreeFlags::default()).unwrap();
while let Some(tree) = tree_iterator.next() {
traverse_upwards(tree);
traverse_upwards_with_iterator(tree);
preorder_traversal(tree);
}
}