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

LeetCode[222]完全二叉树的节点个数

思路:

这个节点个数可以使用递归左儿子个数+递归右儿子个数+1,这个1是根节点,最后结果为节点个数,但我们没有练习到完全二叉树的性质.

完全二叉树的性质是:我简单说一下,大概就是其他节点都满了,就是只缺右面的叶子节点,右面叶子节点缺多少都行,只要不是左面少节点就行。

知道了这个性质,就直到完全二叉树是由满二叉树组成的,那么我们直接求满二叉树的节点就行,满二叉树的节点数量为depth*2-1

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int countNodes(TreeNode root) {if(root == null) return 0;TreeNode left = root.left;TreeNode right = root.right;int leftDepth = 0, rightDepth = 0;while(left != null){left = left.left;leftDepth++;}while(right != null){right = right.right;rightDepth++;}if(leftDepth == rightDepth){return (2<<leftDepth)-1;}return countNodes(root.left) + countNodes(root.right) + 1;//这个+1是添加最后的根节点}
}

 

http://www.xdnf.cn/news/586225.html

相关文章:

  • GraphPad Prism工作表的基本操作
  • python、R、shell兼容1
  • 深入解析Java泛型:从定义到实战应用
  • LangChain文档加载器实战:构建高效RAG数据流水线
  • 使用RUST在Arduino上进行编程(MacOS,mega板)
  • 记录Pycharm断点调试的一个BUG
  • 6.13.拓扑排序
  • 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(二)(完整实现流程)
  • 网络编程 之 从BIO到 NIO加多线程高性能网络编程实战
  • 嵌入式学习笔记 - Void类型的指针
  • FFmpeg解码器配置指南:为什么--enable-decoders不能单独使用?
  • YOLOv11 性能评估与横向对比
  • Vault应用广吗?我是否有学习使用的必要,难不难?
  • 解码工业转型密码,R‘AIN SUITE赋能制造业价值跃迁
  • labview设计一个虚拟信号发生器
  • 齿轮,链轮,同步轮,丝杆传动sw画法
  • 训练一个线性模型
  • Linux 线程(中)
  • 基于FPGA控制电容阵列与最小反射算法的差分探头优化设计
  • 使用pm2 部署react+nextjs项目到服务器
  • (Java基础笔记vlog)Java中常见的几种设计模式详解
  • java接口自动化(四) - 企业级代码管理工具Git的应用
  • 理解全景图像拼接
  • 动态网页爬取:Python如何获取JS加载的数据?
  • Jenkins与Maven的集成配置
  • C++中的string(1)简单介绍string中的接口用法以及注意事项
  • Web前端开发 - 制作简单的焦点图效果
  • 单例模式的运用
  • UniApp+Vue3微信小程序二维码生成、转图片、截图保存整页
  • uniapp实现的简约美观的票据、车票、飞机票模板