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
题目标题:Tree
给定的二叉树形式
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
给定两棵二叉树,把它们合并成一个二叉树,合并规则如下:如果两棵树的对应节点不为空,把这两个节点的和作为新树的节点,如果有一个节点为空,则把非空的节点作为新树的节点。
分析:使用先序法,递归把两棵树的节点相加,节点为空的以0代替即可
public class solution{
//融合两颗二叉树
//1.进行简单非空判断
//2.非空节点相加,空的视作0即可
//3.使用递归的方式进行迭代
public void merge(TreeNode t1,TreeNode t2){
//1.非空判断
if(t1==null&&t2==null)
return;
//2.两个节点的合并成新节点的值(使用三目运算符进行非空筛选)
int val= (t1==null?0:t1.val) + (t2==null?0:t2.val);
//3.合并成新的二叉树 值为val
TreeNode newNode=new TreeNode(val);
//4.左右子树进行递归
newNode.left = merge(t1==null ? null : t1.left , t2==null ? null : t2.right);
newNode.right= merge(t1==null ? null : t1.left , t2==null ? null : t2.right);
//返回最终合成的二叉树
return newNode;
}
}