LeetCode 617 合并二叉树
问题描述:
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
递归
执行用时:1 ms, 在所有 Java 提交中击败了63.92%的用户
内存消耗:39.1 MB, 在所有 Java 提交中击败了36.56%的用户
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
return merge(t1, t2);
}
//在root1上合并
public TreeNode merge(TreeNode root1, TreeNode root2) {
if(root1==null && root2==null) {
//都为null则返回null
return null;
}
else if(root1==null && root2!=null) {
//root1=null则新建子树
root1 = new TreeNode(root2.val);
}
else if(root1!=null) {
//root1!=null则合并root2的节点值
root1.val += root2==null? 0:root2.val;
}
//合并左子树、右子树
TreeNode leftRoot1 = merge(root1.left, root2==null? null: root2.left);
TreeNode rightRoot1 = merge(root1.right, root2==null? null: root2.right);
//合并新节点
root1.left = leftRoot1;
root1.right = rightRoot1;
return root1;
}
}