【1382. 将二叉搜索树变平衡】
链接:https://leetcode-cn.com/problems/balance-a-binary-search-tree
给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。
如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。
如果有多种构造方法,请你返回任意一种。
示例
【解题】JAVA
// Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
//中序遍历-》数组-》树
public TreeNode balanceBST(TreeNode root) {
List<Integer> sortList = new ArrayList<>();
inOrder(root, sortList);
return buildTree(sortList, 0, sortList.size() - 1);
}
private void inOrder(TreeNode node, List<Integer> sortList) {
if (node != null) {
inOrder(node.left, sortList);
sortList.add(node.val);
inOrder(node.right, sortList);
}
}
private TreeNode buildTree(List<Integer> sortList, int start, int end) {
if (start > end) {
return null;
}
int mid = start + (end - start >> 1) ;
TreeNode root = new TreeNode(sortList.get(mid));
root.left = buildTree(sortList, start, mid - 1);
root.right = buildTree(sortList, mid + 1, end);
return root;
}