题目地址(617. 合并二叉树)
https://leetcode-cn.com/problems/merge-two-binary-trees/
题目描述
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入:Tree 1 Tree 21 2/ \ / \3 2 1 3/ \ \5 4 7输出:合并后的树:3/ \4 5/ \ \5 4 7注意: 合并必须从两个树的根节点开始。
前置知识
公司
- 暂无
思路
确定好单层逻辑就行
虽然是同时操作两颗树 但是他们的操作是同步的
关键点
代码
- 语言支持:Java
Java Code:
/*** 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 {//1确定递归的返回值和参数 返回值是合并后的二叉树 参数是两个合并前的二叉树 所以直接用方法体就行public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {//2 确定中止条件 如果左边null 右边有值 返回的是右边的 反之返回左边的 如果两边都为空也没关系 返回null就行if (root1 == null) {return root2;}if (root2 == null) {return root1;}//3 每次递归的逻辑 如果不是上面的情况 就将两边的二叉树的值相加TreeNode treeNode = new TreeNode(root1.val + root2.val);treeNode.left = mergeTrees(root1.left, root2.left);treeNode.right = mergeTrees(root1.right, root2.right);return treeNode;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=vGBEF)
- 空间复杂度:
#card=math&code=O%28n%29&id=VnOew)
