博客
关于我
【java】222. 完全二叉树的节点个数-----了解数据结构,快速了解完全树!
阅读量:360 次
发布时间:2019-03-04

本文共 1001 字,大约阅读时间需要 3 分钟。

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

说明:

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

示例:

输入:

1
/
2 3
/ \ /
4 5 6

输出: 6

方法一:

简单粗暴,每个结点都遍历一次,用时比较长,不过思路很清晰!

public int countNodes(TreeNode root) {           if(root == null) return 0;        return countNodes(root.left) + countNodes(root.right) + 1;    }

方法二:

获取左右子树的深度。左子树深度 hl ,右子树深度 hr。

有以下两种可能:

1.hl == hr:左子树为满二叉树,直接计算左子树的节点数,然后继续递归右子树。

2.hl > hr:右子树为满树(相比左子树少了一层),直接计算右子树的节点数,然后继续递归左子树。

public int countNodes(TreeNode root) {           if(root == null) return 0;                int hl = depth(root.left);        int hr = depth(root.right);        if(hl == hr) {               return   (int)Math.pow(2,hl)+ countNodes(root.right);         } else {               return   (int)Math.pow(2,hr) + countNodes(root.left);         }    }        private int depth(TreeNode node) {           int d = 0;        while(node != null) {               node = node.left;            d ++;        }                return d;    }

转载地址:http://ztmq.baihongyu.com/

你可能感兴趣的文章
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>