1382. 将二叉搜索树变平衡
给你一棵二叉搜索树,请你返回一棵   平衡后   的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。
如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是   平衡的 。
如果有多种构造方法,请你返回任意一种。
链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
   | 
 
 
 
 
 
 
 
 
 
 
 
 
  var balanceBST = function (root) {      let arr = [];   let fn = (node) => {     if (!node) return;     fn(node.left);     arr.push(node.val);     fn(node.right);   };   fn(root);
       let mid = ~~(arr.length / 2);   let h = new TreeNode(arr[mid]);   let buildTree = (node, arr, mid) => {     if (!arr.length || arr.length === 1) {       return;     }     if (arr.length === 2) {              node.left = new TreeNode(arr[0]);       return;     }
           node.left = new TreeNode(arr[~~(mid / 2)]);     buildTree(node.left, arr.slice(0, mid), ~~(mid / 2));
           let a = arr.slice(mid + 1);     let mi = ~~(a.length / 2);     node.right = new TreeNode(a[mi]);     buildTree(node.right, a, mi);   };      buildTree(h, arr, mid);   return h; };
 
  |