Balance a Binary Search Tree
MediumDivide and ConquerGreedyTreeDepth-First SearchBinary Search TreeBinary Tree
Solution
import { TreeNode } from '@algorithm/lib';
export function balanceBST(root: TreeNode | null): TreeNode | null {
return sortedArrToBalanceBST(bstToSortedArr(root));
}
function bstToSortedArr(root: TreeNode | null): TreeNode[] {
const arr: TreeNode[] = [];
function inorderTraverse(node: TreeNode | null) {
if (node === null) {
return;
}
inorderTraverse(node.left);
arr.push(node);
inorderTraverse(node.right);
}
inorderTraverse(root);
return arr;
}
function sortedArrToBalanceBST(arr: TreeNode[]) {
function build(start: number, end: number) {
if (start > end) {
return null;
}
const mid = Math.floor((start + end) / 2);
const node = arr[mid];
node.left = build(start, mid - 1);
node.right = build(mid + 1, end);
return node;
}
return build(0, arr.length - 1);
}