合并二叉树
节点合并存在三种情况:
- 两个节点都为空,返回节点为空
- 其中一个节点为空, 返回非空节点
- 两个节点都是非空节点,new 一个新的节点,并合并两个非空节点的值,返回这个新的节点
一个节点合并后,继续对该节点左右节点进行合并(递归)
/**
* n,m 是两个二叉树的节点个数
* T:O(min(n,m))
* S:O(min(n,m))
*/
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
// 如果两个节点都为空 直接返回 t2 = null
// 有一个为空 判断空节点 返回另一个非空节点
if (t1 == null) return t2;
if (t2 == null) return t1;
// 创建新的节点
TreeNode newNode = new TreeNode(t1.val + t2.val);
// 合并左右节点
newNode.left = mergeTrees(t1.left, t2.left);
newNode.right = mergeTrees(t1.right, t2.right);
return newNode;
}