
【数据结构系列】——完全二叉树(统计二叉树的节点总数)
发布日期:2021-05-07 21:21:37
浏览次数:28
分类:技术文章
本文共 921 字,大约阅读时间需要 3 分钟。
完全二叉树
1. 普通二叉树的遍历,统计节点个数
public int countNodes(TreeNode root){ if (root == null) return 0; return 1 + countNodes(root.left) + countNodes(root.right);}
2. 满二叉树的节点总数
public int countNodes(TreeNode root){ int h = 0; while (root != null){ root = root.left; h++; } //节点总数就是2^h - 1 return (int)Math.pow(2,h) - 1;}
3. 完全二叉树的节点总数
public int countNodes(TreeNode root){ TreeNode l = root,r = root; //记录左右子树高度 int hl = 0,hr = 0; while (l != null){ l = l.left; hl++; } while (r != null){ r = r.right; hr++; } //如果左右子树的高度相同,说明是一颗满二叉树 if (hl == hr){ return (int)Math.pow(2,hl) - 1; } //如果高度不同,则按照普通二叉树的逻辑计算 //但是两个递归只有一个会真的递归下去,另一个一定会触发hr == hl而立即返回,不会递归下去 return 1 + countNodes(root.left) + countNodes(root.right); }
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月28日 20时59分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
技术美术面试问题整理
2019-03-05
C++学习记录 五、C++提高编程(2)
2019-03-05
4 Java 访问控制符号的范围
2019-03-05
VUE3(八)setup与ref函数
2019-03-05
Vue之Element标签页保留用户操作缓存。
2019-03-05
智能合约开发实践(1)
2019-03-05
MATLAB——操作矩阵的常用函数
2019-03-05
CMake自学记录,看完保证你知道CMake怎么玩!!!
2019-03-05
ORB-SLAM2:LoopClosing线程学习随笔【李哈哈:看看总有收获篇】
2019-03-05
牛客练习赛56 D 小翔和泰拉瑞亚(线段树)
2019-03-05
NC15553 数学考试(线性DP)
2019-03-05
MySQL隐藏文件.mysql_history风险
2019-03-05
js求阶乘
2019-03-05
小程序图片正确使用方式(防止发布之后不显示)
2019-03-05
Java学习
2019-03-05
Js函数
2019-03-05
L1-009 N个数求和 (20 分)
2019-03-05
L2-031 深入虎穴 (25 分)
2019-03-05