leetcode 222. Count Complete Tree Nodes
来源:互联网 发布:企业qq群发软件 编辑:程序博客网 时间:2024/06/05 09:14
222. Count Complete Tree Nodes
Given a complete binary tree, count the number of nodes.
Definition of a complete binary tree from Wikipedia:
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.
对于一个节点node,计算它最左端的节点到node的深度为leftDepth,计算它最右端的节点到node的深度是rightDepth;
如果leftDepth和rightDepth相等,那么以node为根节点的树是一棵满二叉树,此时以node为根节点的树的节点个数是pow(2,leftDepth)-1;
如果leftDepth和rightDepth不相等,递归求解node的左子树的节点数和右子树的节点数。注意此时左子树必定是满二叉树了。
从这道题中学到的一个很深的教训是对于树的问题,递归是一个很好的利器,因为树本身就是用递归来定义的。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int countNodes(TreeNode* root) { if(!root) return 0; int leftDepth = 0; int rightDepth = 0; for (TreeNode* node = root; node != NULL; node = node->left) leftDepth++; for (TreeNode* node = root; node != NULL; node = node->right) rightDepth++; if (leftDepth == rightDepth) return (1<<leftDepth)-1; else return countNodes(root->left) + countNodes(root->right) + 1; }};
阅读全文
0 0
- [leetcode] 222.Count Complete Tree Nodes
- [leetcode] 222. Count Complete Tree Nodes
- 222. Count Complete Tree Nodes LeetCode
- leetcode 222. Count Complete Tree Nodes
- LeetCode *** 222. Count Complete Tree Nodes
- LeetCode 222. Count Complete Tree Nodes
- leetcode.222. Count Complete Tree Nodes
- [leetcode]222. Count Complete Tree Nodes
- [leetcode] 222. Count Complete Tree Nodes
- 222. Count Complete Tree Nodes(leetcode) 超时
- [LeetCode]222. Count Complete Tree Nodes
- (未完成!)Leetcode 222. Count Complete Tree Nodes
- LeetCode 222. Count Complete Tree Nodes
- [LeetCode]222. Count Complete Tree Nodes
- [leetcode]222. Count Complete Tree Nodes
- leetcode 222. Count Complete Tree Nodes
- leetcode 222. Count Complete Tree Nodes
- [LeetCode] Count Complete Tree Nodes
- freemarker常见用法
- Xcode使用OpenMP
- Redis 在windows中启动
- Android6.0权限申请
- 疑惑建议总结
- leetcode 222. Count Complete Tree Nodes
- Android中的缓存策略--DiskLruCache
- mysql创建索引
- 最小二乘问题与线性回归中的最大似然估计等价
- JQuery移除指定元素
- golang基础-beego读取配置_输出log日志、tailf组件读取log、配置zookeeper_kafka、发送log至kafka
- 二叉树的建立与遍历
- TensorFlow入门(八)tensorboard 的一个简单示例
- vue的父子构造器