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

简介: 永远在找头节点右树上的最左它如果到了最后一层,左边直接公式求出来了它如果没到最后一层, 右边一个公式求出来,之后走左边递归。永远都看右树最左决定你走左还是走右

文章目录

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

解题思路

代码

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

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


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


来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/count-complete-tree-nodes

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


解题思路



完全二叉树的高度怎么求?一直往左看,看最深到第几层就是完全二叉树的高度

首先数一下一共有几层,然后找右数上的最左节点如果没有达到最大深度5层,现在只有4层说明

右树是满的,高度是3




因为我们永远有总层数,如果总层数10层,

如果当前节点在第5层,如果发现右树上的最左节点没到第10层,到第9层

说明右树是满的,高度是4

右树节点个数为24




如果总层数10层,右树上的最左节点到了第10层,说明左树是满的,高度是5


永远在找头节点右树上的最左

它如果到了最后一层,左边直接公式求出来了

它如果没到最后一层, 右边一个公式求出来,之后走左边递归。

永远都看右树最左决定你走左还是走右


代码

class Solution {

   public int countNodes(TreeNode root) {

       if(root==null){

           return 0;

       }

       return bs(root,1,mostLestLevel(root,1));

   }

   public int bs(TreeNode root,int level,int h){

       if(level==h){

           return 1;

       }

       if(mostLestLevel(root.right,level+1)==h){

           return (1<<(h-level))+bs(root.right,level+1,h);

       }else{

           return (1<<(h-level-1))+bs(root.left,level+1,h);

       }

   }

   public int mostLestLevel(TreeNode node,int level){

       while(node!=null){

           level++;

           node=node.left;

       }

       return level-1;

   }

     

}


目录
相关文章
|
4月前
|
Java C++ Python
leetcode-222:完全二叉树的节点个数
leetcode-222:完全二叉树的节点个数
20 0
|
3月前
【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量
【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量
|
11月前
|
算法 DataX C语言
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法【下】
六、二叉树叶子节点个数 1.代码: 2.测试结果: 七、二叉树第k层节点个数 1.代码: 2.测试结果: 八、二叉树查找值为x的节点 1.代码: 2.测试结果: 九、判断二叉树是否是完全二叉树 1.代码: 2.测试结果: 十、补充:队列代码 Queue.h Queue.c
|
11月前
|
算法 C语言
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法【上】
文章目录 一、二叉数的结构体 二、构建二叉树,供后续测试使用 三、二叉树销毁 四、构建节点 五、二叉树的高度: 1.代码: 2.测试结果: 二叉树节点个数 1.代码: 2.测试结果:
|
4月前
|
存储 算法
算法题解-完全二叉树的节点个数
算法题解-完全二叉树的节点个数
|
4月前
|
算法
二叉树的结点个数、叶子结点个数的代码实现<分治算法>
二叉树的结点个数、叶子结点个数的代码实现<分治算法>
计算左子树规模(结点个数),找出树的根结点
简单的计算公式教你找出左子树到底有多少个娃,也会与你一起寻找根结点,快来看看呀
计算左子树规模(结点个数),找出树的根结点
|
10月前
二叉树子树结点个数
二叉树子树结点个数
47 0
|
算法
【数据结构与算法】二叉树的深度,节点数,第k层的节点数,遍历,二叉树叶节点的个数
【数据结构与算法】二叉树的深度,节点数,第k层的节点数,遍历,二叉树叶节点的个数
204 0
|
算法 安全
二叉树的基本操作(如何计算二叉树的结点个数,二叉树的高度)
二叉树的基本操作(如何计算二叉树的结点个数,二叉树的高度)
231 0