1382. 將二叉搜索樹變平衡(java)

解題思路

首先應當構建二叉樹中序遍歷數組,二叉樹的中序遍歷是升序的有序數組,每次經過選取二叉樹中序遍歷數組的中間位置元素爲根結點,這樣二叉樹的左右子樹高度差不會超過1,左右子樹的元素分別位於根結點的左右兩邊,而後遞歸構建二叉平衡樹便可。java

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
 import java.util.*;
class Solution {
    List<Integer> list = new ArrayList<Integer>();
    public TreeNode balanceBST(TreeNode root) {
        getTree(root);
       return helper(0,list.size()-1);
    }
    public void getTree(TreeNode root){//中序遍歷的結果爲升序 
        if(root.left!=null) getTree(root.left); //獲取左子樹    
        list.add(root.val);//獲取根結點
        if(root.right!=null) getTree(root.right);//獲取右子樹
    }
    public TreeNode helper(int left,int right){
        if(left>right)return null;
        int mid=(left+right)/2;//以中間位置元素創建二叉樹
        TreeNode root=new TreeNode(list.get(mid));
        root.left=helper(left,mid-1);
        root.right=helper(mid+1,right);
        return root;
    }
}
相關文章
相關標籤/搜索