※5179. 將二叉搜索樹變平衡(java)(中序遍歷+二分法)

給你一棵二叉搜索樹,請你返回一棵 平衡後 的二叉搜索樹,新生成的樹應該與原來的樹有着相同的節點值。

如果一棵二叉搜索樹中,每個節點的兩棵子樹高度差不超過 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
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
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);
        }
    } 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章