力扣刷题-树easy

本文介绍了如何解决三个与二叉树相关的编程问题:合并两个二叉树,计算二叉树的直径,以及求解二叉树的最大深度。提供了递归解法,并展示了具体代码实现。这些算法在空间和时间复杂度上都有所考虑,对于理解和处理二叉树数据结构非常有帮助。
摘要由CSDN通过智能技术生成

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值