美文网首页
LeetCode 第654题:最大二叉树

LeetCode 第654题:最大二叉树

作者: 放开那个BUG | 来源:发表于2021-04-26 22:42 被阅读0次

    1、前言

    题目描述

    2、思路

    此题的思路其实非常简单,主要是根据分治法将整个数组分开。

    首先先想一个整体,我找到一个数组最大的数后,将这个节点变成一个父节点,然后最大数左边变成左子树,右边变成右子树,这不是妥妥的递归吗。然后思考一下 base case,肯定是分到数组最左边或者最右边的时候不能在分了(left > right),这时候返回 null 即可。

    3、代码

    public class MaxBinaryTree {
    
        public TreeNode constructMaximumBinaryTree(int[] nums) {
            if(nums == null){
                return null;
            }
    
            return helper(nums, 0, nums.length - 1);
        }
    
        private TreeNode helper(int[] nums, int left, int right){
            if(left > right){
                return null;
            }
    
            int maxIndex = findMax(nums, left, right);
            TreeNode root = new TreeNode(nums[maxIndex]);
            root.left = helper(nums, left, maxIndex - 1);
            root.right = helper(nums, maxIndex + 1, right);
    
            return root;
        }
    
        private int findMax(int[] nums, int left, int right){
            int max = Integer.MIN_VALUE;
            int index = -1;
            for(int i = left; i <= right; i++){
                if(nums[i] > max) {
                    max = nums[i];
                    index = i;
                }
            }
            return index;
        }
    
    
        public static void main(String[] args) {
            int[] nums = {3,2,1,6,0,5};
            TreeNode root = new MaxBinaryTree().constructMaximumBinaryTree(nums);
            System.out.println();
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第654题:最大二叉树

          本文链接:https://www.haomeiwen.com/subject/trcvlltx.html