题目
代码与解析
尤其是这部分
用递归来做
递归三部曲:
- 确定参数及返回值
需要传入数组,返回节点,返回的是构造二叉树的头结点,返回类型是指向节点的指针 -
确定终止条件
如果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
}