LeetCode Count Complete Tree Nodes
2016-01-01 14:43
405 查看
LeetCode Count Complete Tree Nodes
题目
思路
这个树会灰常的大;先沿着左右两遍计算深度。假设深度一样直接代公式算。
假设深度不一样。那就找最以下一层的断点。
代码
int maxD, num; int calDeepFromRight(struct TreeNode* root) { int ans = 0; while (root) { ans++; root = root->right; } return ans; } int calDeepFromLeft(struct TreeNode* root) { int ans = 0; while (root) { ans++; root = root->left; } return ans; } void findBreakPoint(struct TreeNode* root, int pos, int deep) { if (num != -1) return; if (root == NULL && deep == maxD) { num = 1; int base = 1; for (int i = 1; i < deep - 1; i++) num += (base *= 2); num += pos; return; } else { if (root == NULL) return; findBreakPoint(root->left, pos * 2, deep + 1); findBreakPoint(root->right, pos * 2 + 1, deep + 1); } } int countNodes(struct TreeNode* root) { int ld = calDeepFromLeft(root), rd = calDeepFromRight(root); maxD = ld; if (ld == rd) { if (ld == 0) return 0; int base = 1; num = 1; for (int i = 1; i < ld; i++) num += (base *= 2); } else { num = -1; findBreakPoint(root, 0, 1); } return num; }
相关文章推荐
- windows下基于sublime text3的nodejs环境搭建
- Hadoop 2.0 中 NameNode/ResourceManager HA 总结
- Hadoop NameNode元数据相关文件目录解析
- Hadoop 2.0 NameNode HA 和 Federation 实践
- hadoop文件系统的目录结构及datanode不能启动
- nodejs 使用inspector 调试
- 【node.js】update
- hadoop报错 rmr: Cannot delete /login-dy-v10. Name node is in safe mode.
- nodejs 80端口监听失败及NODE_PATH不起作用的问题
- 七天学会NodeJS
- Nodejs——包与NPM
- nodejs安装和配置以及第一个express应用生成
- hadoop 2.2.0的datanode中存储block的多个文件夹的负载均衡问题
- 使用Node包管理器
- Nodejs源码解析之util
- Remove Node in Binary Search Tree
- Delete Node in a Linked List
- nodejs跨域服务端配置
- Reverse Nodes in k-Group
- [LeetCode] 237. Delete Node in a Linked List 解题思路