617. 合并二叉树
代码如下
func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
if root1 == nil {
return root2
}
if root2 == nil {
return root1
}
root1.Val += root2.Val 用前序遍历将root2的值和root1相加
root1.Left = mergeTrees(root1.Left,root2.Left) 然后生成左子树
root1.Right = mergeTrees(root1.Right,root2.Right) 然后生成右子树
return root1
}
654. 最大二叉树
代码如下
func constructMaximumBinaryTree(nums []int) *TreeNode {
if len(nums) == 0 { 如果数组中没有元素,则返回空树
return nil
}
index := findmax(nums) 用自定义的findmax函数找到当前数组中的最大值
root := &TreeNode { 构造根节点,值为找到的最大值
Val : nums[index],
Left : constructMaximumBinaryTree(nums[:index]), 构造左子树,左子树所用的数组是nums[:index]到index为止,不包括index这个最大值
Right : constructMaximumBinaryTree(nums[index+1:]),同理,右子树是从index的下一个元素开始的
}
return root
}
func findmax(nums []int) int {
index := 0
for i,v := range nums {
if nums[index] < v {
index = i
}
}
return index
}