【LeetCode-中等题】 222. 完全二叉树的节点个数

news2024/11/25 21:17:29

文章目录

    • 题目
    • 方法一:把该题当做一个普通的二叉树来做(任何遍历都可以)
    • 方法二:利用完全二叉树的性质来做

题目

在这里插入图片描述

方法一:把该题当做一个普通的二叉树来做(任何遍历都可以)

例如:二叉树的前序遍历(维护一个全局变量)递归无返回值

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

方法二:利用完全二叉树的性质来做

  1. 当前节点只要满足完全二叉树的话,可以通过2^depth-1来计算以当前节点为父节点的数的节点数,这样减少很多递归操作,不需要递归找到每一个节点
  2. 当前节点不满足二叉树的性质 ,那就走常规递归到下一层,再来判断

一定要画图 模拟递归过程
在这里插入图片描述
在这里插入图片描述

lass Solution {
    public int countNodes(TreeNode root) {
        return dfs(root);
    }
    public int dfs(TreeNode root){
        if(root == null) return 0;
        int leftsum = 1;//root不为null  自然高度起始就是1
        int rightsum = 1;
        TreeNode left = root.left;
        TreeNode right = root.right;
        //寻找以该节点为父节点的左右子树的高度
        while(left!=null){
            left = left.left;
            leftsum++;
        }
         while(right!=null){
            right = right.right;
            rightsum++;
        }
        //如果左右子树的高度相等  说明以该节点为父节点的数是完全二叉树  ,所以可以按照完全二叉树的性质来计算节点数 2的高度次方-1  
        if(rightsum == leftsum) return (int)Math.pow(2, rightsum) - 1;
        //如果左右子树的高度不相等  那么进入下一层常规递归
        int left_ = dfs(root.left);
        int right_ = dfs(root.right);
        return left_+right_+1;//最后返回左右子树节点数之和在加上本节点
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何选择一只股票,待完善。

目录 ROE(盈利能力)增长率(成长能力)收现比(营收质量)总资产周转率(经营能力)增长率(成长能力)商誉净资产比(排雷)流动比率(排雷) ROE(盈利能力) 什么是ROE? ROE 全名叫 Return of Equity,翻成中文叫“股东回报率”,也叫"净资产收益率"。 …

token登录的实现

token登录的实现 我这种token只是简单的实现token,就是后端利用UUID 生成简单随机码,利用随机码作为在Redis中的键,然后存储的用户信息作为值,在每次合理请求的时候对token的有效时间进行刷新(利用拦截器)&…

常见的文件格式

一、C:\fakepath\新建文本文档.txt [object String] 实现方式&#xff1a; <input onchange"test(this.value)" type"file"></input><script>function test(e){console.log(e,Object.prototype.toString.call(e))}</script> 二、…

js 数组对象转为 key对应的数组

1、将要转换的格式 2、 转换后格式 3、代码处理 可以使用forEach循环遍历原始数组&#xff0c;并将每个对象的属性值分别存储在一个新的对象中。然后&#xff0c;使用Object.values()方法获取这些属性值的数组。 console.log(result--, result);let dealRes {};result.forEac…

10.12广州见 | 第十六届智慧城市大会报名通道全面开启

第十六届中国智慧城市大会 将于10月12日至13日 在广州举办 智慧城市是数字中国、智慧社会的核心载体&#xff0c;是数字时代城市发展的高级形态。由中国服务贸易协会、中国测绘学会、中国遥感委员会主办的第十六届中国智慧城市大会&#xff0c;将以“数实融合开放创新智引未…

“降本”是关键,FCU1104打造低成本工商业储能EMS

在不久前举行的EESA中国国际储能展上&#xff0c;“工商业储能”成为了热度最高的话题之一&#xff0c;几乎每家展出工商业储能系统的展商都收获了大量观众的驻足围观&#xff0c;热度非凡。究竟是怎样的原因让工商业储能如此瞩目呢&#xff1f; 通过与多家储能厂家沟通并查阅…

群晖管家+内网穿透实现公网远程访问本地黑群晖

白嫖怪狂喜&#xff01;黑群晖也能使用群晖管家啦&#xff01; 文章目录 白嫖怪狂喜&#xff01;黑群晖也能使用群晖管家啦&#xff01;1.使用环境要求&#xff1a;2.下载安装群晖管家app3.随机地址登陆群晖管家app4.固定地址登陆群晖管家app 自己组装nas的白嫖怪们虽然也可以通…

IP转地理位置:探讨技术与应用

IP地址是互联网上设备的唯一标识符&#xff0c;而将IP地址转换为地理位置信息是网络管理、安全监控和市场定位等领域中的一项重要任务。本文将深入探讨IP转地理位置的技术原理和各种应用场景。 IP地址与地理位置 IP地址&#xff08;Internet Protocol Address&#xff09;是一…

一、八大排序(sort)

文章目录 一、时间复杂度&#xff08;一&#xff09;定义&#xff1a;常数操作 二、空间复杂度&#xff08;一&#xff09;定义&#xff1a; 三、排序&#xff08;一&#xff09;选择排序1.定义2.代码3.特性 &#xff08;二&#xff09;冒泡排序1.定义2.代码3.特性 &#xff08…

樱花(筛素数+约数)

题目 给定一个整数 n&#xff0c;求有多少正整数数对 (x,y) 满足 1/x1/y1/n!。 输入格式 一个整数 n。 输出格式 一个整数&#xff0c;表示满足条件的数对数量。 答案对 1e97取模。 数据范围 1≤n≤106 输入样例&#xff1a; 2输出样例&#xff1a; 3样例解释 共有…

中华崛起,科技强国!这三款充满科技风的科技模板,一起来探索吧

最近是不是都被华为mate60和苹果15刷屏了啊 &#xff0c;在我们的生活中&#xff0c;科技有着千变万化的面貌。它让我们的世界变得越来越小&#xff0c;让我们的生活越来越便捷。它使我们的梦想成为现实&#xff0c;使我们的思想得以落地。它打开了新的视野&#xff0c;为我们提…

java面向对象(八)

文章目录 一、abstract关键字的使用1.概念2. abstract修饰类:抽象类3.abstract修饰方法&#xff0c;抽象方法4.abstract使用上的注意点&#xff1a;5.抽象类的匿名子类 二、计算一段代码执行所花费的时间三、接口的使用1.接口的使用2.定义接口中的成员3.代码demo4.Java类可以实…

LabVIEW应用开发——前面板和程序框图

上篇我们讲述了LabVIEW的安装并且新建了一个VI程序成功运行&#xff0c;这篇我们详细了解界面上一些工具、属性和层次结构。 LabVIEW安装 我们双击打开上次创建的.vi文件。 这时候我们发现只有前面板&#xff0c;程序框图界面不见了&#xff0c;我们需要使用CtrlE或者在Windows…

点进来看看ChatBase替代品在提高工作效率方面有什么优势

ChatBase是帮助企业分析和改善其对话式 AI 体验的一个很好的定制聊天机器人平台。但它也有一些局限性&#xff0c;像其对对话分析的关注范围狭窄&#xff0c;而且还依赖手动标记和标记对话进行分析&#xff0c;可能会阻碍提高工作的效率。那有什么比较好的平台能够替代Chatbase…

解决 VMware Network Adapter VMnet1 IP 地址冲突导致无法打开路由器管理页面

问题表现 运行 ipconfig&#xff1a; 以太网适配器 以太网:连接特定的 DNS 后缀 . . . . . . . : lanIPv4 地址 . . . . . . . . . . . . : 192.168.1.226子网掩码 . . . . . . . . . . . . : 255.255.255.0默认网关. . . . . . . . . . . . . : 192.168.1.1以太网适配器 VM…

IM6ULL学习第18章Linux 系统对中断的处理

栈 什么是栈 栈是一段内存空间。ARM处理器程序的运行过程 ARM芯片属于精简指令集(RISC&#xff1a;Reduced Instruction Set Computing) 特点&#xff1a; 1、对内存只有读和写两种指令&#xff0c; 2、所有的数据运算都是在CPU内部完成的。举例实现aab; CPU 先在内存中读…

竞赛选题 基于深度学习的人脸识别系统

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

相比SiteGPT,用HelpLook创建Chatbot有哪些优势?

在当今快节奏的数字时代&#xff0c;很多企业都在不断寻找新的方法来改善客户支持和简化运营。一种广受欢迎的解决方案是使用AI问答机器人&#xff08;Chatbot&#xff09;。聊天机器人凭借其理解自然语言查询和实时响应的能力&#xff0c;已成为各行业企业不可或缺的工具。 S…

1. PCIE基础入门知识

GT/s 是"每秒十亿次传输" 时间版本速率2003Pcie 1.02.5GT/s2006PCIE 2.05GT/s2010PCIE 3.08GT/s2017PCIE 4.016GT/s 高速接口&#xff1a;雷电接口&#xff08;PCIEx4接口 &#xff09; PCIE接口 工作模式&#xff1a;Endpoint 和 Root Port。 Endpoint&#xff0…

[pai-diffusion]pai的easynlp的clip模型训练

EasyNLP带你玩转CLIP图文检索 - 知乎作者&#xff1a;熊兮、章捷、岑鸣、临在导读随着自媒体的不断发展&#xff0c;多种模态数据例如图像、文本、语音、视频等不断增长&#xff0c;创造了互联网上丰富多彩的世界。为了准确建模用户的多模态内容&#xff0c;跨模态检索是跨模态…