算法题解-完全二叉树的节点个数

简介: 算法题解-完全二叉树的节点个数

题目


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

输入: root = [1,2,3,4,5,6]
输出: 6


题解


第一种


我们在函数中先判断root是否为空,如果是那么我们直接返回0,然后我们声明了两个变量h1和h2,并将其设置为0,然后我们声明了两个指针l和r,并将它们都指向根节点,接下来我们使用循环去计算左子树的高度,在循环中,我们将指针l不断地指向左子节点,每次循环h1的值加1,直到l为空,这样h1的值就代表了左子树的高度,然后我们使用另一个循环来计算右子树的高度,在循环中,我们将指针r不断地指向右子节点,每次循环h2的值加1,直到r为空,这样h2的值就代表了右子树的高度,然后我们使用条件判断来比较左右子树的高度h1和h2是否相等,如果相等则说明该二叉树是一棵满二叉树,我们直接返回这个值即可,如果左右子树的高度不相等则说明该二叉树不是满二叉树,我们这里需要递归地计算左子树和右子树的节点数量,将它们相加后再加上根节点本身,最后返回这个值即可

var countNodes = function(root) {
    if(!root) return 0
    let h1 = 0, h2 = 0
    let l = root, r = root
    while(l) {
        l = l.left
        h1++
    }
    while(r) {
        r = r.right
        h2++
    }
    if(h1===h2) return Math.pow(2, h1)-1
    return countNodes(root.left)+countNodes(root.right)+1
};


第二种


我们在函数中先判断root是不是空,如果是则直接返回0,然后我们声明了一个空数组que,用于存储待处理的节点,然后我们将根节点root推入数组que中,接下来我们声明了一个变量result,用于记录节点数量,将值初始化为0, 然后我们使用循环去遍历数组que,直到数组为空为止,在循环中,我们首先获取当前数组que的长度,存储在变量size中,然后我们使用循环去遍历当前层级的节点,在循环中,我们从数组que的头部取出一个节点,赋值给变量node,并将节点数量result加1,然后我们去判断当前节点是否有左子节点和右子节点,如果有左子节点,我们则将左子节点推入数组que中,如果有右子节点,我们将右子节点推入数组que中,这样我们就完成了对当前层级节点的处理,同时将下一层级的节点推入数组que中,当数组que为空时,则说明我们已经遍历了所有节点,这个时候我们返回节点数量result即可

var countNodes = function(root) {
    if (!root) return 0;
    const que = [];
    que.push(root);
    let result = 0;
    while (que.length){
        const size = que.length;
        for (let i=0; i<size; i++){
            node = que.shift();
            result++;
            node.left && que.push(node.left);
            node.right && que.push(node.right);
        }
    }
    return result;
}
相关文章
|
7月前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
46 0
|
2月前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
4月前
|
Kubernetes 算法 调度
在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
|
5月前
|
传感器 机器学习/深度学习 算法
基于GA遗传算法的WSN网络节点覆盖优化matlab仿真
本研究应用遗传优化算法于无线传感器网络(WSN),优化节点布局与数量,以最小化节点使用而最大化网络覆盖率。MATLAB2022a环境下,算法通过选择、交叉与变异操作,逐步改进节点配置,最终输出收敛曲线展现覆盖率、节点数及适应度值变化。无线传感器网络覆盖优化问题通过数学建模,结合遗传算法,实现目标区域有效覆盖与网络寿命延长。算法设计中,采用二进制编码表示节点状态,适应度函数考量覆盖率与连通性,通过选择、交叉和变异策略迭代优化,直至满足终止条件。
|
5月前
|
设计模式 JavaScript 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
194 0
|
6月前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
6月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
6月前
|
算法 C语言
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
|
7月前
|
存储 算法 IDE
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
数据结构与算法⑯(第四章_下)二叉树的层序遍历+判断完全二叉树+一道OJ
57 1
|
6月前
|
算法
二叉树删除节点算法---递归
二叉树删除节点算法---递归