题目描述:

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:

代码:

//深度优先遍历
func mergeTrees(t1, t2 *TreeNode) *TreeNode {if t1 == nil {return t2}if t2 == nil {return t1}t1.Val += t2.Val//左子树进行merget1.Left = mergeTrees(t1.Left, t2.Left)//右子数进行merget1.Right = mergeTrees(t1.Right, t2.Right)return t1
}//广度优先搜索
//广度优先搜索需要借助队列
func mergeTrees(t1, t2 *TreeNode) *TreeNode {if t1 == nil {return t2}if t2 == nil {return t1}//合并节点值merged := &TreeNode{Val: t1.Val + t2.Val}//队列queue := []*TreeNode{merged}queue1 := []*TreeNode{t1}queue2 := []*TreeNode{t2}for len(queue1) > 0 && len(queue2) > 0 {node := queue[0]//queue 出队queue = queue[1:]node1 := queue1[0]//queue1出队queue1 = queue1[1:]node2 := queue2[0]queue2出队queue2 = queue2[1:]left1, right1 := node1.Left, node1.Rightleft2, right2 := node2.Left, node2.Rightif left1 != nil || left2 != nil {if left1 != nil && left2 != nil {left := &TreeNode{Val: left1.Val + left2.Val}node.Left = left//入队queue = append(queue, left)queue1 = append(queue1, left1)queue2 = append(queue2, left2)} else if left1 != nil {node.Left = left1} else { // left2 != nilnode.Left = left2}}if right1 != nil || right2 != nil {if right1 != nil && right2 != nil {right := &TreeNode{Val: right1.Val + right2.Val}node.Right = rightqueue = append(queue, right)queue1 = append(queue1, right1)queue2 = append(queue2, right2)} else if right1 != nil {node.Right = right1} else { // right2 != nilnode.Right = right2}}}return merged
}

参考地址:https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode-solution/

小米面试题:合并二叉树相关推荐

  1. 大数据学长面试-------小米面试题

    小米面试题 学长1 大家可以投一下小米的推荐算法. 一面:问两个有序大数组合并成一个数组的最佳方法,还有快排,问了所有项目. 二面:是问推荐算法的业务实现,还有如果你自己做一个推荐,你会怎么选择模型. ...

  2. 《LeetCode力扣练习》第617题 合并二叉树 Java

    <LeetCode力扣练习>第617题 合并二叉树 Java 一.资源 题目: 给你两棵二叉树: root1 和 root2 . 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些 ...

  3. 牛客题霸 [合并二叉树] C++题解/答案

    牛客题霸 [合并二叉树] C++题解/答案 题目描述 已知两颗二叉树,将它们合并成一颗二叉树.合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替.例如: 两颗二叉树是: ...

  4. 【LeetCode】【HOT】617. 合并二叉树(递归)

    [LeetCode][HOT]617. 合并二叉树 文章目录 [LeetCode][HOT]617. 合并二叉树 package hot;import java.util.ArrayDeque; im ...

  5. 算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树

    算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树 最大二叉树 654. 最大二叉树 - 力扣(LeetCode) 给定一个不重复的整数数组 nums . 最大二叉 ...

  6. 小米面试题:手机分身,电话号码隐藏。

    小米面试题: 手机分身,电话号码隐藏. 0-9分别对应ZERO,ONE,TWO,...,NINE 为保证手机拨号安全性,拨号后,存为对应的字符串,并打乱顺序,保证安全性. 现在给定一个字符串,求最小的 ...

  7. Leetcode.617 合并二叉树

    题目链接 Leetcode.617 合并二叉树 easy 题目描述 给你两棵二叉树: root1和 root2. 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会) ...

  8. LeetCode 617. 合并二叉树

    617. 合并二叉树   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客,亓官劼的博客2. 难度 简单 题目 给定两 ...

  9. 小米面试题:一副从1到n的牌

    题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手上没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组. 前段时间在知乎上看到貌似很火的小米面试题,也看 ...

最新文章

  1. 【ES6】变量的解构赋值
  2. java随机生成6位随机数 5位随机数 4位随机数
  3. Python语言学习之字母S开头函数使用集锦:set/sys/super用法之详细攻略
  4. hive udf 分组取top1_项目实战从0到1之hive(27)数仓项目(九)数仓搭建 DWS 层
  5. MongoDB索引实战技巧
  6. JAVA字节码指令iload_n为什么只有0到3?
  7. git 入门操作指令
  8. 第四章Python数值计算工具 ——Numpy
  9. Python操作Mysql实例代码教程(查询手册)
  10. 这份Java面试题,阿里P7的正确率都不到50%!!
  11. Django评论系统
  12. JSP中使用JSP模板
  13. Mysql数据库的备份与恢复
  14. x265 编码一行,以及vbv上溢/下溢之后的处理
  15. 惠普HP LaserJet Pro P1106 打印机驱动
  16. PHP验证码类庫,php验证码类
  17. dbpedia知识图谱java_中文通用百科知识图谱(CN-DBpedia)
  18. python中assert是什么意思_你常常看到 Python 代码中的 assert 是个啥?
  19. 【UER #4】量子态的棋盘
  20. 二叉树-满二叉树、完全二叉树

热门文章

  1. 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)
  2. 借助URLOS快速安装python3网站环境
  3. Git冲突与解决方法【转】
  4. Java(CS)请求分流
  5. Xcache3.2.0不支持php7.0.11
  6. JavaScript(循环)
  7. iOS 视频启动界面
  8. SQL Server中一个隐性的IO性能杀手-Forwarded record
  9. 提交请求输出XML文件的时候出错.解决方法
  10. 你必须会的--Dijkstra算法--单源最短路径问题