zoukankan      html  css  js  c++  java
  • 最大二叉树

    最大二叉树

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

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

    示例 :

    输入:[3,2,1,6,0,5]
    输出:返回下面这棵树的根节点:
    在这里插入图片描述
    解题思路:运用递归解决,首先需要思考的是根节点该如何构造,我们可以在指定区间内找到最大值,然后再将最大值左右区间分别进行查找最大值,依次递归。
    ps: 二叉树题目的一些感想:在考虑用递归时,不要纠结于递归的具体实现,应该先把框架构思出来再进行具体实现这样会容易一些

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode constructMaximumBinaryTree(int[] nums) {
            return constructMaximumBinaryTree(nums, 0, nums.length - 1);
        }
        
        private TreeNode constructMaximumBinaryTree(int[] nums, int l, int r) {
            if(l > r)
                return null;
            
            //记录最大值下标
            int cur = l;
            for(int i = l; i <= r; i++) {
                if(nums[i] > nums[cur]) {
                    cur = i;
                }
            }
            
            TreeNode node = new TreeNode(nums[cur]);
            node.left = constructMaximumBinaryTree(nums, l, cur - 1);
            node.right = constructMaximumBinaryTree(nums, cur + 1, r);
            return node;
        }
    }
  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/13914261.html
Copyright © 2011-2022 走看看