有序数组转搜索二叉树
二叉搜索树概念:
若它的左子树不为空,则左子树上的所有节点的值均小于它根节点的值;
若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值;
它的左右子树也分别为二叉树。下面给出两个例子
题目:LeetCode108给你一个整数数组nums,其中元素已经按照升序排列,请你将其转换为一颗高度平衡的二叉搜索树。
高度平衡二叉树是一颗满足每个结点的左右两个子树的高度差的绝对值不超过1的二叉树。
运用二分查找,每次用升序序列的中间元素作为根节点:
public TreeNode sortedArrayBST(int[] nums){return helper(nums, 0 ,nums.length - 1);}public TreeNode helper(int[] nums, int left, int right){if (left > right){return null;}//总是选择中间位置左边的元素作为根节点,int mid = (left + right) / 2;TreeNode root = new TreeNode(nums[mid]);root.left = helper(nums,left,mid - 1);root.right = helper(nums,mid + 1,right);return root;}