Merge Two Binary Trees
Description:
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.
You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.
Example 1:
Input:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
Output:
Merged tree:
3
/ \
4 5
/ \ \
5 4 7
Note:
The merging process must start from the root nodes of both trees.
问题描述:
给定两棵树,将两棵树合并成一颗树。
合并规则:如果两个节点重叠,将这两个点的值相加,作为合并后新节点的值。否则,非空的节点将被用作新树的节点。
Solution:
合并两个二叉树想到同步遍历,对于相同位置上的一对结点n1和n2,处理策略是:
若n1和n2都存在,则只需要保留其中一个结点(如n1),将另一结点的值加到此结点上即可(如n1.val += n2.val)。
若n1或n2任一为NULL,则合并后的二叉树对应位置上的结点就是非空的那个。
若n1和n2都为NULL,则合并后节点为NULL。
因为涉及到结点的更新,所以用递归会是一个简单而又方便的方法。
/**
* 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) {
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;
}
}