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 let mut size = 1;
27 for child in &self.children {
28 size += child.get_subtree_size();
29 }
30 size
31 }
32}