程序笔记   发布时间:2022-07-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,请注明来意。
标签: