108.将有序数组转换为二叉搜索树 给你一个整数数组 nums
,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
1 2 3 输入:nums = [-10 ,-3 ,0 ,5 ,9 ] 输出:[0 ,-3 ,9 ,-10 ,null,5 ] 解释:[0 ,-10 ,5 ,null,-3 ,null,9 ] 也将被视为正确答案:
Solution :中序遍历
相当于是根据中序遍历来还原平衡二叉搜索树,有点类似于二分查找和创建二叉树的结合,也就是利用二分查找来查找树以及其子树的根节点
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 class Solution { public TreeNode sortedArrayToBST (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; } }