給你一棵二叉搜索樹,請你返回一棵 平衡後 的二叉搜索樹,新生成的樹應該與原來的樹有着相同的節點值。
如果一棵二叉搜索樹中,每個節點的兩棵子樹高度差不超過 1 ,我們就稱這棵二叉搜索樹是 平衡的 。
如果有多種構造方法,請你返回任意一種。
示例:
輸入:root = [1,null,2,null,3,null,4,null,null]
輸出:[2,1,3,null,null,null,4]
解釋:這不是唯一的正確答案,[3,1,4,null,2,null,null] 也是一個可行的構造方案。
提示:
樹節點的數目在 1 到 10^4 之間。
樹節點的值互不相同,且在 1 到 10^5 之間。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/balance-a-binary-search-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
class Solution {
ArrayList<TreeNode> orderList = new ArrayList<>();
public TreeNode balanceBST(TreeNode root) {
inorder(root);
return buildTree(0, orderList.size()-1);
}
private TreeNode buildTree(int left, int right) {
if(left > right) return null;
int mid = (left + right)/2;
TreeNode root = orderList.get(mid);
root.left = buildTree(left, mid-1);
root.right = buildTree(mid+1, right);
return root;
}
private void inorder(TreeNode root) {
if(root != null) {
inorder(root.left);
orderList.add(root);
inorder(root.right);
}
}
}