finding_x_for_each_node__pre_order(root.left, x_table, horizontal_distance - 1) finding_x_for_each_node__pre_order(root.right, x_table, horizontal_distance + 1) def vertical_order(root): x_table: Dict[int, list] = dict() # map of number, list finding_x_for_each_node__pre_order(root, x_table) for x in sorted(x_table.keys()): print_array_inline(x_table[x]) if __name__ == "__main__": tree_root = BinaryTree.single_line_input(input_array()) BinaryTree.display(tree_root) vertical_order(tree_root) """ 1 / \ 2 3 / \ \ 4 5 6 / \ 7 8 1 2 3 4 5 -1 6 7 -1 -1 8 -1 -1 -1 -1 -1 -1 Output 7 4
global diameter # Update diameter, when curr_diameter > left + right depth diameter = max(diameter, left_depth + right_depth) # Notice return max(left_depth, right_depth) + 1 # maximum_depth def diameter_of_binary_tree(root: BinaryTreeNode) -> int: find_depth( root ) # basically find the diameter when we are processing the tree for finding depth return diameter if __name__ == "__main__": tree_input = input_array() tree_root = BinaryTree.single_line_input(tree_input) BinaryTree.display(tree_root) print("diameter : ", diameter_of_binary_tree(tree_root)) """ 1 / \ 2 3 / \ 4 5 1 2 3 4 5 -1 -1 -1 -1 -1 -1 """ """ 0 / \ 1 2