Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
给定一个升序排列的二叉树,将其转换为一棵高度平衡的二叉树。
采用递归分治法。
树结点类
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
算法实现类
public class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
// 参数检验
if (nums == null || nums.length < 1) {
return null;
}
// 递归分治法求解
return solve(nums, 0, nums.length - 1);
}
/**
* 递归分治求解方法
*
* @param nums 升序排序数组
* @param start 开始位置
* @param end 结束位置
* @return 根结点
*/
public TreeNode solve(int[] nums, int start, int end) {
// 还有未处理的数据
if (start <= end) {
// 找蹭位置
int mid = start + ((end - start) >> 1);
// 构造根结点
TreeNode root = new TreeNode(nums[mid]);
// 求左子树
root.left = solve(nums, start, mid - 1);
// 求右子树
root.right = solve(nums, mid + 1, end);
// 返回结果
return root;
}
return null;
}
}
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。
版权声明:本文为博主原创文章,未经博主允许不得转载。
【LeetCode-面试算法经典-Java实现】【108-Convert Sorted Array to Binary Search Tree(排序数组转变为平衡二叉树)】
原文地址:http://blog.csdn.net/derrantcm/article/details/47392999