654. 最大二叉树

题目描述:

《654. 最大二叉树》 https://leetcode-cn.com/problems/maximum-binary-tree/description/

分析:

https://www.youtube.com/watch?v=oHnT9zTsXTg&t=7s

  • 任意的数据都可以吗?

任意 自己把平衡二叉树的概念引入是错误的理解

《654. 最大二叉树》 image.png

recursion

/**
input:不含重复元素的整数数组
output:通过给定的数组构建最大二叉树,并且输出这个树的根节点
最大二叉树定义如下:
1 二叉树的根是数组中的最大元素。
2 左子树是通过数组中最大值左边部分构造出的最大二叉树。(递归)
3 右子树是通过数组中最大值右边部分构造出的最大二叉树。(递归)

**/
func constructMaximumBinaryTree(nums []int) *TreeNode {
    if nums == nil {
        return nil
    }
    return constructMaximumTree(nums, 0, len(nums)-1)
}
func constructMaximumTree(nums []int, begin int, end int) *TreeNode {
    if begin > end {
        return nil
    }

    maxPos := begin
    for i := begin + 1; i <= end; i++ {
        if nums[i] > nums[maxPos] {
            maxPos = i
        }
    }
    rootNode := TreeNode{Val: nums[maxPos]}

    rootNode.Left = constructMaximumTree(nums, begin, maxPos-1)
    rootNode.Right = constructMaximumTree(nums, maxPos+1, end)
    return &rootNode
}

测试

《654. 最大二叉树》 image.png

性能

    原文作者:寒号鸟fly
    原文地址: https://www.jianshu.com/p/a802f28b32dc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞