/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
// 对 t1 节点进行判空,若该节点为空则直接返回 t2 的对应节点
if (t1 == null) {
return t2;
}
// 对 t2 节点进行判空,若该节点为空则直接返回 t1 的对应节点
if (t2 == null) {
return t1;
}
// 定义新的根节点为两棵树的根节点的和
TreeNode merged = new TreeNode(t1.val + t2.val);
// 新定义的树的所有左子树分别为 t1 和 t2 各自对应的左子树的和
merged.left = mergeTrees(t1.left, t2.left);
// 新定义的树的所有右子树分别为 t1 和 t2 各自对应的右子树的和
merged.right = mergeTrees(t1.right, t2.right);
// 返回最终合并完的二叉树
return merged;
}
}
这道题首先对传进来的两个树节点进行判空,若 t1 的值为空,则返回 t2 的值,若 t2 的值为空则直接返回 t1 的值。若两个均不为空,则两个进行相加,由于传进来的是两个根节点,因此新的树的根节点即为这两个值的和,接下来就是要把两颗二叉树对应位置的值进行相加作为新的二叉树对应位置的值,用 mergeTrees
方法对整棵树的所有左子树完成以上相加的操作,同理再对所有右子树进行对应相加的操作,最终一颗新的符合题意的二叉树就生成了。