Please solve in Python Coding Language. Please explain in detail the algorithm you use to solve the problem
including the complexity analysis and efficiency.

5) Balance a Binary Search Tree Given the root of a binary search tree, return a balanced binary search tree with the same node values. If there is more than one answer, return any of them. A binary search tree is balanced if the depth of the two subtrees of every node never differs by more than 1 . Example 1: Input: root =[1, null, 2, null, 3, null, 4, null, null ] Output: [2,1,3, null, nul1, null, ]] Explanation: This is not the only correct answer, [3,1,4, null, ]} is also correct. Input: root =[2,1,3] Output: [2,1,3] Constraints: - The number of nodes in the tree is in the range [1,104]. - 1<= Node ? val <=105