def get_tree_node_by_index(root: BinaryTreeNode, idx: int) -> BinaryTreeNode: return BinaryTree(root).get_node_by_index(idx)
def get_tree_node_by_value(root: BinaryTreeNode, val: int) -> BinaryTreeNode: return BinaryTree(root).get_node_by_value(val)
def get_tree_size(root): return BinaryTree(root).size()
def test_case1(self): self.assertEqual(3, BinaryTree(Array([3, 1, 5, 0, 2]).to_binary_tree()).depth())
def to_array(root): return BinaryTree(root).to_array()
def test_case1(self): root: BinaryTreeNode = Array([3, 1, 5, 0, 2]).to_binary_tree() self.assertEqual(7, BinaryTree._get_array_size_for_tree(root))
def leveOrder(root): return BinaryTree(root).levelOrder()
def postorder(root): return BinaryTree(root).postorderTraversal()
def inorder(root): return BinaryTree(root).inorderTraversal()
def preorder(root): return BinaryTree(root).preorderTraversal()
def lca(root, p, q): return BinaryTree(root).lowest_common_ancestor(p, q)