题目
https://leetcode-cn.com/problems/merge-two-binary-trees/
代码
居然写对了
/**
* 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&&t2==null)
return null;
TreeNode head3=new TreeNode();
if(t1==null){
head3.val=t2.val;
head3.left=t2.left;
head3.right=t2.right;
}
else if(t2==null){
head3.val=t1.val;
head3.left=t1.left;
head3.right=t1.right;
}
else{
head3.val=t1.val+t2.val;
head3.left=mergeTrees(t1.left,t2.left);
head3.right=mergeTrees(t1.right,t2.right);
}
return head3;
}
}
复杂度
时间复杂度:O(min(m,n)),其中 m 和 n 分别是两个二叉树的节点个数。对两个二叉树同时进行深度优先搜索,只有当两个二叉树中的对应节点都不为空时才会对该节点进行显性合并操作,因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度:O(min(m,n)),其中 m 和 n 分别是两个二叉树的节点个数。空间复杂度取决于递归调用的层数,递归调用的层数不会超过较小的二叉树的最大高度,最坏情况下,二叉树的高度等于节点数。