pub struct DerivationTree<T:PartialEq> {
terms: Vec<T>,
parents: Vec<usize>
}
impl<T:PartialEq> DerivationTree<T> {
pub fn new(root: T) -> Self {
DerivationTree {
terms: vec![root],
parents: vec![usize::MAX]
}
}
pub fn get(&self, index: usize) -> &T {
&self.terms[index]
}
pub fn push(&self, term: T, parent: usize) -> usize {
todo!()
}
pub fn is_duplicate(&self, mut index: usize) -> bool {
let term = &self.terms[index];
index = self.parents[index];
while index != usize::MAX {
if &self.terms[index] == term {
return true;
}
index = self.parents[index];
}
false
}
}