使用深度优先遍历,对一个节点合并后对该节点左右子树进行合并,这是一个递归的过程。
分为三个情况:
如果两个二叉树的对应节点都为空,则合并后的二叉树的对应节点也为空;
如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点;
如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要显性合并两个节点
复杂度分析
时间复杂度:O(\min(m,n))O(min(m,n)),其中 mm 和 nn 分别是两个二叉树的节点个数。对两个二叉树同时进行深度优先搜索,只有当两个二叉树中的对应节点都不为空时才会对该节点进行显性合并操作,因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度:O(\min(m,n))O(min(m,n)),其中 mm 和 nn 分别是两个二叉树的节点个数。空间复杂度取决于递归调用的层数,递归调用的层数不会超过较小的二叉树的最大高度,最坏情况下,二叉树的高度等于节点数
package leetcode;
public class demo10 {
public static void main(String[] args) {
//树b
TreeNode b=new TreeNode(1);
b.left=new TreeNode(2);
b.left.left=new TreeNode(3);
b.left.right=new TreeNode(4);
b.right=new TreeNode(5);
b.right.right=new TreeNode(6);
// 打印数b
System.out.println(b)