zoukankan      html  css  js  c++  java
  • [leetCode]654. 最大二叉树

    题目

    链接:https://leetcode-cn.com/problems/maximum-binary-tree

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

    二叉树的根是数组中的最大元素。
    左子树是通过数组中最大值左边部分构造出的最大二叉树。
    右子树是通过数组中最大值右边部分构造出的最大二叉树。
    通过给定的数组构建最大二叉树,并且输出这个树的根节点。

    示例 :
    
    输入:[3,2,1,6,0,5]
    输出:返回下面这棵树的根节点:
    
          6
        /   
       3     5
            / 
         2  0   
           
            1
    

    递归

    class Solution {
        public TreeNode constructMaximumBinaryTree(int[] nums) {
            if (nums.length == 0) return null;
            return traversal(nums, 0, nums.length - 1);
        }
    
        // 左闭右闭区间
        private TreeNode traversal(int[] nums, int begin, int end) {
            // 说明切割完毕返回空
            if (begin > end) return null;
            // 寻找切割点下标
            int rootIndex = getMax(nums, begin, end);
            TreeNode root = new TreeNode(nums[rootIndex]);
            if (begin == end) return root;
            // 切割左子树
            int leftBegin = begin;
            int leftEnd = rootIndex - 1;
            // 切割右子树
            int rightBegin = rootIndex + 1;
            int rightEnd= end;
            // 递归
            root.left = traversal(nums, leftBegin, leftEnd);
            root.right = traversal(nums, rightBegin, rightEnd);
            return root;
        }
    
        // 获取数组中指定范围内最大值的下标
        private int getMax(int[] nums, int begin, int end) {
            int max = begin;
            for (int i = begin + 1; i <= end; i++) {
                if (nums[i] > nums[max])
                    max = i;
            }
            return max;
        }
    }
    
  • 相关阅读:
    nginx源码分析:module机制
    Linux源码分析之:malloc、free
    shell格式化字符串
    shell执行字符串中的命令
    docker安装并运行mongo
    docker安装并运行kibana
    docker安装并运行elasticsearch
    docker安装并运行rabbitmq
    docker安装并运行ngnix
    docker安装并运行redis
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13921910.html
Copyright © 2011-2022 走看看