generalized_suffix_tree/suffix_tree/
tree.rs1use crate::{data::tree_item::Character, iter::node_iter::*, suffix_node::node::*};
2use core::fmt::{Debug, Display};
3use std::collections::LinkedList;
4
5pub trait SuffixTree<T>{
6 fn root(&self)->&NodeID;
7 fn is_leaf(&self, node_id: &NodeID)->bool;
8 fn get_node_child(&self, node_id: &NodeID, edge_label: &T)->Option<&NodeID>;
9 fn get_node_parent(&self, node_id: &NodeID)->Option<&NodeID>;
10 fn get_node_depth(&self, node_id: &NodeID)->usize;
11 fn get_suffix_link(&self, node_id: &NodeID) -> &usize;
12 fn get_node_label<'a>(&'a self, node_id: &'a NodeID)->Vec<T>;
13 fn get_node_path_label(&self, node_id: &NodeID)->&[T];
14 fn get_node_path_pre(&self, node_id: &NodeID)->LinkedList<NodeID>;
15 fn get_node_path_post(&self, node_id: &NodeID)->LinkedList<NodeID>;
16 fn is_suffix(&self, s:&[T])->bool;
18 }
19
20pub trait Tree<T: PartialEq + Display + Debug + PartialOrd>{
21 fn iter_nodes_pre(&self, node_id: &NodeID)->PreOrdNodes<Character<T>>;
22 fn mrca(&self, nodes: Vec<NodeID>)->&NodeID;
23 fn leaf_pairwise_mrca_matrix(&self)->Vec<Vec<&NodeID>>;
24}