算法训练营day17(补),二叉树6-1

type TreeNode struct {

  Val   int

  Left  *TreeNode

  Right *TreeNode

}

654. 最大二叉树

func constructMaximumBinaryTree(nums []int) *TreeNode {

  root := &TreeNode{}

  if len(nums) == 1 {

    root.Val = nums[0]

    return root

  }

  //寻找最大值和索引

  index := 0

  max := 0

  for i := 0; i < len(nums); i++ {

    if max < nums[i] {

      max = nums[i]

      index = i

    }

  }

  root.Val = max

  //根据最大值索引切割左右子树,然后递归

  if index > 0 {

    leftTree := nums[0:index]

    root.Left = constructMaximumBinaryTree(leftTree)

  }

  if index < len(nums)-1 {

    rightTres := nums[index+1:]

    root.Right = constructMaximumBinaryTree(rightTres)

  }

  return root

}

617. 合并二叉树

func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {

  if root1 == nil {

    return root2

  } else if root2 == nil {

    return root1

  }

//前序遍历 中左右

  root1.Val += root2.Val

  root1.Left = mergeTrees(root1.Left, root2.Left)

  root1.Right = mergeTrees(root1.Right, root2.Right)

  return root1

}

700. 二叉搜索树中的搜索

func searchBST(root *TreeNode, val int) *TreeNode {

  if root == nil || root.Val == val {

    return root

  }

// 如果值比目标值大,向左递归,否则向右递归

  if root.Val > val {

    return searchBST(root.Left, val)

  }

  return searchBST(root.Right, val)

}

你可能感兴趣的:(算法,数据结构)