617. 合并二叉树
题目
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/
4 5
/ \ \
5 4 7
注意: 合并必须从两个树的根节点开始。
通过次数207,694
提交次数263,861
解法
空间复杂度O(max(m,n))
时间复杂度O(min(m,n))
1.递归
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
TreeNode node;
if(root1==null&&root2==null){
return null;
}else if(root1==null){
node=new TreeNode(root2.val);
node.left=mergeTrees(null,root2.left);
node.right=mergeTrees(null,root2.right);
}else if(root2==null){
node=new TreeNode(root1.val);
node.left=mergeTrees(root1.left,null);
node.right=mergeTrees(root1.right,null);
}else{
node =new TreeNode(root1.val+root2.val);
node.left=mergeTrees(root1.left,root2.left);
node.right=mergeTrees(root1.right,root2.right);
}
return node;
}
}
简化的写法
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2){
if(root1==null) return root2;
else if(root2==null) return root1;
else{
TreeNode node=new TreeNode(root1.val+root2.val);
node.left=mergeTrees(root1.left,root2.left);
node.right=mergeTrees(root1.right,root2.right);
return node;
}
}
}
543. 二叉树的直径
题目
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diameter-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
想法
最大的左高+右高
104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最大深度 3 。
class Solution {
public int maxDepth(TreeNode root) {
if(root==null) return 0;
int left=maxDepth(root.left);
int right=maxDepth(root.right);
return Math.max(left,right)+1;
}
}
226. 翻转二叉树
翻转一棵二叉树。
示例:
输入:
4
/
2 7
/ \ /
1 3 6 9
输出:
4
/
7 2
/ \ /
9 6 3 1
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null) return root;
TreeNode left=invertTree(root.left);
TreeNode right=invertTree(root.right);
root.left=right;
root.right=left;
return root;
}
}