二叉树的深度和高度问题(算法村第八关白银挑战)

二叉树的最大深度

104. 二叉树的最大深度 - 力扣(LeetCode)

给定一个二叉树 root ,返回其最大深度。

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

示例 1:

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

提示:

  • 树中节点的数量在 [0, 104] 区间内。

递归

对于根节点,它到叶结点的最大深度 = 1 + max(左节点的最大深度,右节点的最大深度)。所以,我们只需递归地求当前结点到叶结点的最大深度即可

public int maxDepth(TreeNode root)
{
   
    //触底情况:访问叶结点的左右孩子
    if (root == null)
        return 0;

    int leftDepth = maxDepth(root.left);
    int rightDepth = maxDepth(root.right);

    return 1 + Math.max(leftDepth, rightDepth);
}

层序遍历

最大深度也即二叉树的层数,所以我们可以采用层序遍历的方法,每遍历完一层就记录二叉树的层数。

public int maxDepth(TreeNode root)
{
   
    if (root == null)
        return 0;

    int maxDepth = 0;
    ArrayDeque<TreeNode> queue = new ArrayDeque<>();
    queue.offer(root);

    while (!queue.isEmpty())
    {
   
        //当前层的结点个数
        int size = queue.size();

        for (int i = 0; i < size; i++)
        {
   
            TreeNode curNode = queue.poll();

            if (curNode.left != null)
                queue.offer(curNode.left);
            if (curNode.right != null)
                queue.offer(curNode.right);
        }

        maxDepth++; //当前层遍历完毕,总层数+1
    }

    return maxDepth;
}

平衡二叉树

110. 平衡二叉树 - 力扣(LeetCode)

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

img

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

示例 2:

img
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

提示:

  • 树中的节点数在范围 [0, 5000]

求最大深度的过程中判断一下即可

public boolean isBalanced(TreeNode root)
{
   
    //假设它是平衡二叉树,找找看有没有反例(只有反例才能一直保存)
    boolean[] isBalanced = {
   true};
    maxDepth(root, isBalanced);

    return isBalanced[0];
}

public int maxDepth(TreeNode root, boolean[] isBalanced)
{
   
    if (root == null)
        return 0;

    int leftDepth = maxDepth(root.left, isBalanced);
    int rightDepth = maxDepth(root.right, isBalanced);

    if(Math.abs(leftDepth - rightDepth) > 1)
        isBalanced[0] = false;

    return 1 + Math.max(leftDepth, rightDepth);
}

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 21:02:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 21:02:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 21:02:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 21:02:05       18 阅读

热门阅读

  1. PHP运行环境之宝塔Web站点部署

    2024-01-07 21:02:05       34 阅读
  2. Android 车联网——电源管理功能扩展(十)

    2024-01-07 21:02:05       27 阅读
  3. Linux&Shell--多服务器自动登录连接

    2024-01-07 21:02:05       38 阅读
  4. Qt 的流式布局 FlowLayout

    2024-01-07 21:02:05       43 阅读
  5. 结构体数组按总分排序(结构体)

    2024-01-07 21:02:05       30 阅读
  6. 家庭顶梁柱保险如何配置?

    2024-01-07 21:02:05       37 阅读