代码随想录刷题笔记-Day15

1. 完全二叉树的的节点个数

222. 完全二叉树的节点个数icon-default.png?t=N7T8https://leetcode.cn/problems/count-complete-tree-nodes/

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

解题思路

完全二叉树的特点就是最后一层靠左边的是完全有节点的。

常规思路就是O(n)进行遍历,但是这是一个完全二叉树,肯定是可以利用完全二叉树的特性来完成的。

如果这是一颗满二叉树,那么节点数目为2的n次方减1,如果不是满二叉树,那就分别计算左右子树的节点个数。而左右子树的个数又可以根据是不是满二叉树进行计算。这就可以依据递归实现。

终止条件:节点为null或左右子树深度相等

返回值是左右子树节点个数相加再加1,或者2的n次方-1

代码

class Solution {
    public int countNodes(TreeNode root) {
        if (root == null)
            return 0;
        TreeNode left = root;
        TreeNode right = root;
        int deep = 0;
        while (left != null && right != null) {
            left = left.left;
            right = right.right;
            deep++;
        }
        if (left == null && right == null) {
            return (int) Math.pow(2, deep) - 1;
        } else {
            return countNodes(root.left) + countNodes(root.right) + 1;
        }
    }
}

2.平衡二叉树

110. 平衡二叉树icon-default.png?t=N7T8https://leetcode.cn/problems/balanced-binary-tree/

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

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

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

示例 2:

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

示例 3:

输入:root = []
输出:true

解题思路

这道题的平衡二叉树只和高度差有关,左右子树的高度差不大于1的情况下就为平衡二叉树。

但是返回值不能是true,因为涉及到高度的传递。

所以返回值为int类型。由于当子树高度差超过1后,无法马上return false。为了防止后续迭代进行额外的操作。使用标志位-1,发现-1就说明不会是平衡二叉树了,直接返回-1。

终止条件:root为null的时候,返回0;

代码

class Solution {
    public boolean isBalanced(TreeNode root) {
        return getHeight(root) != -1;
    }

    public int getHeight(TreeNode root) {
        if (root == null)
            return 0;
        int left = getHeight(root.left);
        int right = getHeight(root.right);
        if (left == -1 || right == -1)
            return -1;
        if (Math.abs(left - right) > 1)
            return -1;
        return Math.max(left, right) + 1;
    }
}

相关推荐

  1. 代码随想day10

    2024-01-31 08:42:06       24 阅读
  2. 代码随想笔记Day36

    2024-01-31 08:42:06       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-31 08:42:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-31 08:42:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-31 08:42:06       82 阅读
  4. Python语言-面向对象

    2024-01-31 08:42:06       91 阅读

热门阅读

  1. K8S故障临时设置节点为不可调度

    2024-01-31 08:42:06       49 阅读
  2. uniapp的安卓升级功能说明

    2024-01-31 08:42:06       58 阅读
  3. 动态规划入门题目

    2024-01-31 08:42:06       62 阅读
  4. CUDA 笔记

    2024-01-31 08:42:06       53 阅读
  5. Elasticsearch:入门

    2024-01-31 08:42:06       43 阅读
  6. Flink 添加 / 部署 Jar 包的若干注意事项

    2024-01-31 08:42:06       45 阅读
  7. 下载jar中classes下的文件

    2024-01-31 08:42:06       63 阅读
  8. 数据仓库之数据治理

    2024-01-31 08:42:06       47 阅读
  9. Android 14 修改安兔兔等三方工具显示的屏幕尺寸

    2024-01-31 08:42:06       112 阅读
  10. linux -- per-CPU变量

    2024-01-31 08:42:06       56 阅读
  11. 3分钟搞定springboot 定时任务cron表达式

    2024-01-31 08:42:06       60 阅读
  12. BERT问答模型回答问题

    2024-01-31 08:42:06       47 阅读
  13. 大数据存储与处理技术之Spark

    2024-01-31 08:42:06       46 阅读