当前位置: 首页 > article >正文

Leetcode 完全二叉树的节点个数

在这里插入图片描述

不讲武德的解法

java 实现

class Solution {
    public int countNodes(TreeNode root) {
        if(root == null) return 0;
        return countNodes(root.left) + countNodes(root.right) + 1;
    }
}

根据完全二叉树和满二叉树的性质做

在这里插入图片描述

class Solution {
    public int countNodes(TreeNode root) {
        if (root == null) {
            return 0;
        }
        
        int leftDepth = getDepth(root.left);
        int rightDepth = getDepth(root.right);
        
        if (leftDepth == rightDepth) {
            // 左子树是满二叉树,节点数为 2^leftDepth - 1,加上根节点和右子树
            return (1 << leftDepth) + countNodes(root.right);
        } else {
            // 右子树是满二叉树,节点数为 2^rightDepth - 1,加上根节点和左子树
            return (1 << rightDepth) + countNodes(root.left);
        }
    }
    
    private int getDepth(TreeNode node) {
        int depth = 0;
        while (node != null) {
            depth++;
            node = node.left; // 完全二叉树的最左路径
        }
        return depth;
    }
}

http://www.kler.cn/a/405271.html

相关文章:

  • element-plus的组件数据配置化封装 - table
  • 区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
  • 通过vite+vue3+pinia从0到1搭建一个uniapp应用
  • C语言Day 04 学习总结
  • 使用低成本的蓝牙HID硬件模拟鼠标和键盘来实现自动化脚本
  • 【每日 C/C++ 问题】
  • application/json 和 application/x-www-form-urlencoded 区别
  • php:使用socket函数创建WebSocket服务
  • Verilog HDL可综合与不可综合语句
  • OpenCV基本图像处理操作(五)——图像数据操作
  • git commit -m ‘last‘什么意思和git add.什么意思
  • 每日学习笔记005:(C++)迭代器
  • Spring Boot核心概念:自动配置
  • 国土变更调查拓扑错误自动化修复工具的研究
  • 湘潭大学人工智能考试复习1(软件工程)
  • 应用系统开发(13) 在 Xilinx FPGA 中实现自定义累加平均低通滤波器
  • 魔众题库系统 v10.0.0 客服条、题目导入、考试导航、日志一大批更新
  • ISO 21434标准:汽车网络安全管理的利与弊
  • XCVU13P板卡设计原理图:509-基于XCVU13P的4路QSFP28光纤PCIeX16收发卡
  • mysqldbcompare 使用及参数详解
  • 【HarmonyOS】鸿蒙应用接入微博分享
  • Elasticsearch 6.8 分析器
  • 【Lucene】Lucene的索引文件格式:深入理解Lucene使用的索引文件格式
  • Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
  • GoZero 上传文件File到阿里云 OSS 报错及优化方案
  • 服务器数据恢复—raid5阵列故障导致上层系统分区无法识别的数据恢复案例