654. 最大二叉树

题目描述:

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

分析:

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

  • 任意的数据都可以吗?

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

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
}

测试

image.png

性能

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容