Balance a Binary Search Tree
给一个二叉树, 返回一个bst. 这个题先把二叉树变成sorted array, 然后在变成bst.
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 |
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode balanceBST(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); dfs(root, list); Collections.sort(list); return build(list, 0, list.size() - 1); } private TreeNode build(List<Integer> list, int start, int end) { if(start > end) return null; int mid = start + (end - start) / 2; TreeNode root = new TreeNode(list.get(mid)); root.left = build(list, start, mid - 1); root.right = build(list, mid + 1, end); return root; } private void dfs(TreeNode root, List<Integer> list) { if(root == null) return; if(root.left != null) dfs(root.left, list); if(root.right != null) dfs(root.right, list); list.add(root.val); } } |