最大二叉树

最大二叉树

题目要求:

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

  • 二叉树的根是数组中的最大元素。
    左子树是通过数组中最大值左边部分构造出的最大二叉树。
    • 右子树是通过数组中最大值右边部分构造出的最大二叉树。

最近的学习记录下

当中的主要思想,采用分割,最大值为中间点,分割左区间和右区间

当中推荐下标索引法,方便快捷

package 二叉树;

public class 二叉树最大值 {
    /**
     * 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
     * 二叉树的根是数组中的最大元素。
     * 左子树是通过数组中最大值左边部分构造出的最大二叉树。
     * 右子树是通过数组中最大值右边部分构造出的最大二叉树。
      */
    //确定递归函数的参数和返回值
    /**public TreeNode buildMaxNumBinaryTree(int[] nums){
        //1.确定终止条件
        TreeNode node=new TreeNode(0);
        if(nums.length==1){
            node.val=nums[0];
            return node;
        }
        //2.找到数组中的最大值和对应的下标
        int max_val=0;
        int max_val_index=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]>max_val){
                max_val=nums[i];
                max_val_index=i;
            }
        }
        //3.将根节点赋值
        node.val=max_val;
        //最大值做区间构造左子树
        if(max_val_index>0){
            int[] newVec=new int[max_val_index];///TODO:EROOR
            node.left=buildMaxNumBinaryTree(newVec);
        }
        //最大值在下标右区间,构造右子树
        if(max_val_index<(nums.length-1)){
            int[] newVec=new int[10];//TODO:
            node.right=buildMaxNumBinaryTree(newVec);
        }
        return node;

    }
    */
    //下标索引法
    public TreeNode traversal(int[] nums,int left,int right){
        if(left>=right) return null;
        //分割点下标
        int maxValIndex=left;
        for(int i=left+1;i<right;++i){
            if(nums[i]>nums[maxValIndex]) maxValIndex=i;
        }
        TreeNode root=new TreeNode(nums[maxValIndex]);
        //左闭右开
        root.left=traversal(nums,left,maxValIndex);
        //
        root.right=traversal(nums,maxValIndex+1,right);

        return root;

    }
}

完结
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值