给定一个不重复的整数数组 nums
。 最大二叉树 可以用下面的算法从 nums
递归地构建:
- 创建一个根节点,其值为
nums
中的最大值。 - 递归地在最大值 左边 的 子数组前缀上 构建左子树。
- 递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums
构建的 最大二叉树 。
func constructMaximumBinaryTree(nums []int) *TreeNode {
if len(nums) == 0 {return nil}
maxIndex := findMax(nums)
root:= &TreeNode{
Val:nums[maxIndex],
Left : constructMaximumBinaryTree(nums[:maxIndex]),
Right: constructMaximumBinaryTree(nums[maxIndex+1:len(nums)]),
}
return root
}
func findMax(nums []int) (index int){
for i, v:= range nums{
if nums[index] <v{
index = i
}
}
return
}
给你两棵二叉树: root1
和 root2
。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
func mergeTrees(t1 *TreeNode,t2 *TreeNode)*TreeNode{
if t1==nil && t2==nil{ return nil}
if t1 ==nil{
return t2
}
if t2 == nil{
return t1
}
t:= &TreeNode{Val: t1.Val + t2.Val}
t.Left = mergeTrees(t1.Left,t2.Left)
t.Right = mergeTrees(t1.Right,t2.Right)
return t
}
给定二叉搜索树(BST)的根节点 root
和一个整数值 val
。
你需要在 BST 中找到节点值等于 val
的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null
。
func searchBST(root *TreeNode, val int) *TreeNode {
if root ==nil { return nil}
if root.Val == val { return root}
if root.Val >val {
return searchBST(root.Left,val)
}
return searchBST(root.Right,val)
}