Leetcode二叉树专题:104求最大深度、111最小深度、101判断对称

1.求二叉树的最大深度

题目描述:

104给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

思路:

后序遍历DFS:
用递归的方法求深度,一棵树的深度就是子树最大深度+1,即他的左子树最大深度和右子树最大深度中最大的那个+1,加的1就是根节点的那层

* 终止条件:root == 0,当为空的时候说明root的上一层就是叶子结点了
* 推断条件:获取左子树右子树的深度maxDepth(root.left)
* 返回值:此树的深度max()+1

代码:

class Solution {
    public int maxDepth(TreeNode root) {
        //如果是叶子节点则返回0
        if(root == null){
            return 0;
        }
        //树的深度是左子树与右子树最大深度+1
        return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
    }
}

 

2.求二叉树的最小深度

题目描述:

111.给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

 

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

思路:

不同于求最大深度,当根节点没有左子树的时候,二叉树的最小深度不是0,而是右子树的最大深度+1,所以多了一个判断

代码:

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        int left = minDepth(root.left);
        int right = minDepth(root.right);
        //当根节点的左子树或右子树为空的时候就算不为空的子树的长度
        return (left!=0 && right!=0) ? (1+Math.min(left,right)) : (1+left+right);
    }
}

 

3.对称二叉树

题目描述

101.给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3

思路:利用递归的方法

    //1.输入参数:左子树的左节点+右子树的右节点,以及左子树的右节点+右子树的左节点,两两比较
    //2.停止条件:判断是否都为空,都为空说明两个节点相同,返回true,若有一个为空一个不为空则肯定是不对称,返回false
    //3.循环逻辑&&返回参数:两节点相同(都为null或者val值相同)返回true,,不同返回false

class Solution {
    public boolean isSymmetric(TreeNode root) {//1.确定输入参数:树节点,返回值是判断相等的布尔值
        return checked(root,root);
    }

    public boolean checked(TreeNode left,TreeNode right){
        if(left == null && right == null){//都为空说明两个节点相同,返回true
            return true;
        }
        if(left == null || right == null){//若有一个为空一个不为空则肯定是不对称,返回false
            return false;
        }
        return left.val == right.val && checked(left.left,right.right) && checked(left.right,right.left);
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值