algorithm binary_tree computer_science data_structure recursion search_tree self_balancing_tree time_complexity