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

文章目录

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

题目

在这里插入图片描述

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

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

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  自然高度起始就是1int 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.xdnf.cn/news/138991.html

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

相关文章

SpringCloud Gateway搭建Gateway 微服务应用实例

😀前言 本篇博文是关于SpringCloud Gateway搭建Gateway 微服务应用实例,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您…

白捡一个存储型XSS

本文由掌控安全学院 - 杳若 投稿 起因 利用fofa搜索时发现 org"China Education and Research Network Center" && body"/register" 任意用户注册 在找到该CMS的时候发现存在任意用户注册的情况 http://xxxx.edu.cn/student/Register.ashx …

在已知的二维坐标里找到最接近的点

一、业务场景 最近在研发的项目,在做可视化层,在全球地图上,对我们的国家的陆地地图经纬度按照步长为1的间隔做了二维处理。在得到一组整数的点位信息后,需要将我们已有的数据库数据(业务项目)按照地址的经纬度,映射到…

肖sir__mysql之存储__012

mysql之存储 一、存储 1、什么是存储过程 定义:存储过程就是实现某个特定功能的sql语句的集合,编译后的存储过程会保存在数据库中,通过存储过程的名称可以反复的调用执行。 2、存储过程的优点? (1)存储创建后,可以反复的调用&am…

python项目127.0.0.1:5000访问失败

Windows环境下启动python项目,接口访问失败 解决: 方法1: 将host配成0.0.0.0,并用本机ip端口号访问 python代码示例: from flask import Flaskapp Flask(__name__)app.route(/index) def index():return helloapp.…

有了Spring为什么还需要SpringBoot呢

目录 一、Spring缺点分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依赖 3.2 自动装配 一、Spring缺点分析 1. 配置文件和依赖太多了!!! spring是一个非常优秀的轻量级框架,以IOC(控制反转&…

Elasticsearch 8.10 中引入查询规则 - query rules

作者:Kathleen DeRusso 我们很高兴宣布 Elasticsearch 8.10 中的查询规则! 查询规则(query rules)允许你根据正在搜索的查询词或根据作为搜索查询的一部分提供的上下文信息来更改查询。 什么是查询规则? 查询规则&…

vue框架实现表情打分效果

本来今天要实现这个功能 但是在网上查了一下 就csdn上有一个符合要求的 但是他竟然收费,痛心疾首啊 太伤白嫖党的心的 所以我手写了一个这个类似功能的代码 希望能帮到有这个需求的同学们 技术栈是VUE3 用其他技术栈的也可以看 因为逻辑很简单都一样的 // 问卷的虚拟数据 con…

如何用CRM软件系统管理企业客户

客户对企业的重要程度不言而喻。可以说,客户是企业收益的来源和可持续发展的基础,客户的转化率和保留率也与企业的发展息息相关。企业想要成功转化客户,需要经历客户跟踪、挖掘、维护等一系列过程。下面我们来说说,CRM客户管理系统…

Flask框架-2-[单聊]: flask-socketio实现websocket的功能,实现单对单聊天,flask实现单聊功能

一、概述和项目结构 在使用flask-socketio实现单聊时,需要将会话id(sid) 与用户进行绑定,通过emit(事件,消息,tosid) ,就可以把消息单独发送给某个用户了。 flask_websocket |--static |--js |--jquery-3.7.0.min.js |--socket.io_4.3.1.js |--template…

leetcode543 二叉树的直径

题目 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 输入:root [1,2,3,4,5] 输出&#xff1…

jmeterbeanshell调用jsonpath获取对应值

1.jmeter 新建线程组、Java Request、BeanShell Assertion、View Results Tree 2、在BeanShell Assertion中贴入代码: import org.apache.jmeter.extractor.json.jsonpath.JSONManager; import java.util.List; JSONManager js new JSONManager(); String jsonStr…

手机上比较好用的笔记软件使用哪一款?

手机已经成为我们日常生活不可或缺的一部分,它们伴随着我们的方方面面。在这部小小的设备中,我们可以完成许多任务,其中之一就是记录笔记。手机上的笔记软件如今多种多样,但在选择时,敬业签可能是你不容错过的选择。 …

多平台兼容性:跑腿系统开发的移动端和Web端技术选项

随着移动设备和Web浏览器的广泛使用,跑腿系统的开发需要考虑多平台兼容性。本文将讨论一些在开发跑腿系统的移动端和Web端时可用的技术选项,并提供示例代码以帮助您入门。 移动端技术选项: 1. React Native React Native是一个流行的移动应…

YashanDB混合存储揭秘:行式存储如何为高效TP业务保驾护航(下)

上一篇文章https://mp.weixin.qq.com/s/mQLzi2PSZxqwwACSsq49ng为大家讲述了行式存储中事务并发控制的关键设计和优化。YashanDB采用了In-place Update 的块级 MVCC,能极大提高事务并发处理能力。本篇文章,我们将会详解插入性能优化和宽行存储的设计。 插…

查看吾托帮88.47的docker里的tomcat日志

步骤如下 (1)ssh (2)ssh root192.168.88.47 等待输入密码:fytest (3)pwd #注释:输出/root (4)docker exec -it wetoband_deploy /bin/bash #注释&#xff1…

【记录】Python 之于 C/C++ 区别

记录本人在 Python 上经常写错的一些地方&#xff08;C/C 写多了&#xff0c;再写 Python 有点切换不过来&#xff09; 逻辑判断符号用 and、or、!可以直接 10 < num < 30 比较大小分支语句&#xff1a;if、elif、else使用 、-&#xff0c;Python 中不支持 、- - 这两个…

elk日志某个时间节点突然搜索不到了

elk日志某个时间节点突然搜索不到了,检查filebeat正常 Kibana手动上传数据: 响应: Error: Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [2000]/[2000] maximum shards open 原因:ElasticSearch总分片数量导致的异常,ES…

Qt重写QTreeWidget实现拖拽

介绍 此文章记录QTreeWidget的重写进度&#xff0c;暂时停滞使用&#xff0c;重写了QTreeWidget的拖拽功能&#xff0c;和绘制功能&#xff0c;自定义了数据结构&#xff0c;增加复制&#xff0c;粘贴&#xff0c;删除&#xff0c;准备实现动态刷新数据支持千万数据动态刷新&a…

JAVA面经整理(2)

一)解决哈希冲突的方法有哪些&#xff1f; 哈希冲突指的是在哈希表中&#xff0c;不同的键值映射到了相同的哈希桶&#xff0c;也就是数组索引&#xff0c;导致键值对的冲突 1)设立合适的哈希函数:通过哈希函数计算出来的地址要均匀的分布在整个空间中 2)负载因子调节: 2.1)开放…