Skip to main content

similarity_core/
tree.rs

1use std::rc::Rc;
2
3#[derive(Debug, Clone)]
4pub struct TreeNode {
5    pub label: String,
6    pub value: String,
7    pub children: Vec<Rc<TreeNode>>,
8    pub id: usize,
9    pub subtree_size: Option<usize>,
10}
11
12impl TreeNode {
13    #[must_use]
14    pub fn new(label: String, value: String, id: usize) -> Self {
15        TreeNode { label, value, children: Vec::new(), id, subtree_size: None }
16    }
17
18    pub fn add_child(&mut self, child: Rc<TreeNode>) {
19        self.children.push(child);
20    }
21
22    #[must_use]
23    pub fn get_subtree_size(&self) -> usize {
24        if let Some(size) = self.subtree_size {
25            return size;
26        }
27        let mut size = 1;
28        for child in &self.children {
29            size += child.get_subtree_size();
30        }
31        size
32    }
33}