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; };
|