generalized_suffix_tree/suffix_tree/
tree.rs

1use 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    /// Checks if the input slice is a suffix of any of the strings present in the tree.
17    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}