1382. Balance a Binary Search Tree - cocoder39/coco39_LC GitHub Wiki
1382. Balance a Binary Search Tree
- Step 1: in-order traverse to get sorted order
- step 2: divide-and-conquer to build balanced BST
class Solution:
def balanceBST(self, root: TreeNode) -> TreeNode:
sortedArr = []
self.inorderTraverse(root, sortedArr)
return self.formBalancedBST(sortedArr, 0, len(sortedArr)-1)
def inorderTraverse(self, root: TreeNode, sortedArr: list) -> None:
if not root:
return
if root.left:
self.inorderTraverse(root.left, sortedArr)
sortedArr.append(root)
if root.right:
self.inorderTraverse(root.right, sortedArr)
def formBalancedBST(self, sortedArr: list, start: int, end: int) -> TreeNode:
if start > end:
return None
mid = start + (end - start) // 2
node = sortedArr[mid]
node.left = self.formBalancedBST(sortedArr, start, mid-1)
node.right = self.formBalancedBST(sortedArr, mid+1, end)
return node