题意
合并两个给定的子二叉树,新的二叉树每个节点是两个二叉树对应节点的和,如果某一个二叉树的节点不存在,则取另外一个二叉树对应节点的值作为新的二叉树对应节点的值。
题目来源:https://leetcode.com/problems/merge-two-binary-trees/
标记难度:Easy
提交次数:1/1
代码效率:98.24%
耗时:25分钟
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Input: Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 Output: Merged tree: 3 / \ 4 5 / \ \ 5 4 7
|
分析
主要考察对递归算法的理解。
- 首先考虑边界,如果两个子二叉树都为空,则新的二叉树必定为空
- 考虑其中一个子二叉树为空,则新的二叉树直接等于另外一个子二叉树
- 如果两个子二叉树都不为空,新二叉树节点值为两个子二叉树对应节点的值的和,同时对两个子二叉树的左右子树进行递归调用,仔细想想就明白了
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { TreeNode ret; if(t1 == null && t2 == null){ return null; }else if(t1 != null && t2 == null){ ret = t1; }else if(t1 == null && t2 != null){ ret = t2; }else { ret = new TreeNode(t1.val + t2.val); ret.left = mergeTrees(t1.left,t2.left); ret.right = mergeTrees(t1.right,t2.right); } return ret; } }
|
当然别人思路的总是最好的 o(╥﹏╥)o
1 2 3 4 5 6 7 8
| public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if (t1 == null) return t2; if (t2 == null) return t1; TreeNode result = new TreeNode(t1.val + t2.val); result.left = mergeTrees(t1.left, t2.left); result.right = mergeTrees(t1.right, t2.right); return result; }
|
一些废话
学习数据结构的时候,总感觉递归对自己来说是弱项,智商不够用。今天居然一次性直接做出来了。学习数据结构和算法真的能培养思维逻辑和解决问题的能力。fighting !!!