题目
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.
题意
给定两个二叉树,将其中一个放到另一个上面,两个树种一些结点是重叠的,另外一些则不是。
你需要将他们合并成一个新的二叉树。合并的规则:
- 如果两个节点重叠,那么在生成的树种,相应结点的值为二者的和。
- 否则,非空结点将作为新树的结点。
分析及解答
public class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
TreeNode result = null ;//复用以往的结点
if(t1 == null && t2 == null){
//1.待处理的两个结点都为空,则返回空。
return null;
}else if(t1 != null && t2 != null){
//2.待处理2结点,都不为空,则求和并生成新结点。(此处复用了结点t1)
result = t1;
result.val = t1.val + t2.val;
result.left = mergeTrees(t1.left, t2.left);//一致处理左孩子,确保结构上的一致性。
result.right = mergeTrees(t1.right, t2.right);
}else if(t1 != null){
//3.t1不为空,而t2为空。t1可继续往深处遍历,而t2不再可以,通过null值来模拟t2继续往下遍历。
result = t1;
result.left = mergeTrees(t1.left, null);
result.right = mergeTrees(t1.right, null);
}else{
result = t2;
result.left = mergeTrees(null, t2.left);
result.right = mergeTrees(null, t2.right);
}
return result;
}
}