大佬教程收集整理的这篇文章主要介绍了108_将有序数组转换为二叉搜索树,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
108_将有序数组转换为二叉搜索树
package 二叉树.二叉搜索树; /** * https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/ * * @author Huangyujun * 升序数组 转成高度平衡的二叉树(不断的new 结点),需要经过对比:高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 * 升序对应升序的话,就是 小的在左边,大的在右边(这次要求大的力度是比原来左边大(小于等于1),否则,这个点null了,)题意应该将不超过改成不小于才是官网的解法呀 * * 题意: * 每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 * 然后官网的解法就是只是单纯把升序数组转成一颗平衡二叉树,我的天,我觉得官网的理解的题意有bug,此题理解点“每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。”是个问题 */ public class _108_将有序数组转换为二叉搜索树 { // public TreeNode sortedArrayToBST(int[] nums) { // TreeNode root = new TreeNode(nums[0]); // int n = nums.length; // TreeNode node = root; // for(int i = 1; i < n; i++) { // if(nums[i] <= nums[i - 1]) { //小于等于前一个结点,作为左子树 // TreeNode left = new TreeNode(nums[i]); // node.left = left;//需要同步 结点往下跑 // node = node.left; // }else { //看看,有没有机会做人家的右边(比较大的值) // //比较前提是人间有了左子树呀 // if(node.left == null) { //直接放到右边 // TreeNode right = new TreeNode(nums[i]); // node.right = right; // node = node.right; // }else if(Math.abs(nums[i] - node.left.val) <= 1) { // TreeNode right = new TreeNode(nums[i]); // node.right = right;//需要同步 结点往下跑 // node = node.left; // }else { // node.right = null;//需要同步 结点往下跑 // node = node.left; // } // } // } // return root; // } //官网答案: 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; } } }
以上是大佬教程为你收集整理的108_将有序数组转换为二叉搜索树全部内容,希望文章能够帮你解决108_将有序数组转换为二叉搜索树所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。