const _: () = assert!(std::mem::size_of::<Node>() == std::mem::size_of::<(usize, usize, usize)>());
enable_garbage_collection: bool, // Whether to enable automatic garbage collection based on heuristics.
// Add two nodes representing 'false' and 'true' respectively; these cannot be created using insert.
debug_assert_ne!(right, self.empty_vector(), "right node can never be the empty vector.");
debug_assert!(value < self.value(right), "value should be less than right node value.");
let (index, _inserted) = self.nodes.insert(Node::new(value, down.index(), right.index()));
// Check whether the direct children of a valid node are valid (this implies that the whole tree is valid if the root is valid).
/// Returns a Data tuple for the given LDD node(value, down, right). Note, ldd cannot be 'true' or 'false.
/// Returns a DataRef tuple for the given LDD node(value, down, right). Note, ldd cannot be 'true' or 'false.