题目

leetcode:654

代码与解析

尤其是这部分

用递归来做

递归三部曲:

  • 确定参数及返回值
    需要传入数组,返回节点,返回的是构造二叉树的头结点,返回类型是指向节点的指针

  • 确定终止条件
    如果nums长度小于1,返回nil,题目中规定了nums长度>=1

  • 单层逻辑

index := max(nums)
root := &TreeNode{Val:nums[index]}
root.Left = constructMaximumBinaryTree(nums[:index])
root.Right = constructMaximumBinaryTree(nums[index+1:])

这里面需要求数组最大值:

func max(nums []int)(index int){
    for i:=0;i<len(nums);i++{
        if nums[i]>nums[index]{
            index = i
        }
    }
    // 返回索引
    return index
}

整体代码:

func constructMaximumBinaryTree(nums []int) *TreeNode {
    if len(nums)==0{
        return nil
    }
    index := max(nums)
    root := &TreeNode{Val:nums[index]}
    root.Left = constructMaximumBinaryTree(nums[:index])
    root.Right = constructMaximumBinaryTree(nums[index+1:])
    return root
}
func max(nums []int)(index int){
    for i:=0;i<len(nums);i++{
        if nums[i]>nums[index]{
            index = i
        }
    }
    // 返回索引
    return index
}
分类: 算法

站点统计

  • 文章总数:309 篇
  • 分类总数:19 个
  • 标签总数:191 个
  • 运行天数:1006 天
  • 访问总数:124343 人次

浙公网安备33011302000604

辽ICP备20003309号