《leetCode》: Count Complete Tree Nodes
2016-07-07 11:35
357 查看
题目
Given a complete binary tree, count the number of nodes.notice:
(In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.)
思路一:报超时错误
得到树的前序遍历,即得到了节点的个数。实现代码如下:
public class Solution { List<TreeNode> list = new ArrayList<TreeNode>(); public int countNodes(TreeNode root) { preOrder(root); return list.size(); } private void preOrder(TreeNode root) { if(root==null){ return ; } list.add(root); preOrder(root.left); preOrder(root.right); } }
由于这种思路完全没有利用完成二叉树的特点,报超时是正常的,下面我们需要寻找更好的思路来完成。
思路二
思路来自于:https://discuss.leetcode.com/topic/21317/accepted-easy-understand-java-solution确实经典,自己想不到!!!
public class CountNodes_v2 { public int countNodes(TreeNode root) { if(root == null){ return 0; } int leftDepth = leftDepth(root); int rightDepth = rightDepth(root); if(leftDepth == rightDepth){ return (1<<leftDepth)-1; } else{//如果不相等,则递归到左右子树的节点数+1. return 1 + countNodes(root.left) + countNodes(root.right); } } public int leftDepth(TreeNode root){ int depth = 0; while(root!=null){ depth ++; root = root.left; } return depth; } public int rightDepth(TreeNode root){ int depth = 0; while(root!=null){ depth ++; root = root.right; } return depth; } }
相关文章推荐
- nodejs加密Crypto的实例代码
- Node.js DES加密的简单实现
- 推荐几个学习Node.js的站点
- Node.js 学习笔记
- Node.js des加密
- Restify一
- eclipse 安装node js 调试环境
- hadoop源码解析---INodeReference机制 推荐
- Node.js入门之快速搭建开发环境
- Node.js DES加密的简单实现
- nodejs加密Crypto的实例代码
- windows 下 express 应用于生产环境
- 为基于Express的应用上手,准备 Git与VS Code
- [LintCode] Swap Nodes in Pairs 成对交换节点
- Node.js NPM国内镜像
- Nodejs实现代理服务器配置
- 深入解析桶排序算法及Node.js上JavaScript的代码实现
- 用nodejs做Web前端服务器的一些经验
- 如何在多Node版本的情况下公用一个npm
- Reverse Nodes in k-Group