leetcode #222 Count Complete Tree Nodes
来源:互联网 发布:ipv6网络环境搭建 编辑:程序博客网 时间:2024/06/02 05:51
题目是要计算完全二叉树的节点数。首先看到题目很自然地想用递归的方法去做,但是写完后发现运行超时,递归的时间复杂度为O(n)。
接下来,基于完全二叉树的特点,可以应用一种更快速的方法,每次比较前节点的最左子节点和最右子节点的深度,如果深度相同,那么以该节点为根节点的子树节点数为
2^h-1。如果不同就继续以该方式递归的计算左右子树的节点数,并加上当前节点,表达式写作 countNodes(root->left)+countNodes(root->right)+1。该方法的最好情况下复杂度为O(logn),即O(h),复杂度介于O(logn)与O(n)之间,速度有所提升。
/** * 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) { int lcount = 0, rcount = 0; TreeNode* left = root, *right = root; if (!root) return 0; while (left) { lcount++; left = left->left; } while (right) { rcount++; right = right->right; } if (lcount == rcount) return (2<<(lcount-1))-1; else return countNodes(root->left)+countNodes(root->right)+1; } };
0 0
- leetcode 222: Count Complete Tree Nodes
- Count Complete Tree Nodes - LeetCode 222
- Leetcode[222]-Count Complete Tree Nodes
- leetcode #222 Count Complete Tree Nodes
- [Leetcode 222, Medium] 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(c)
- 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
- leetcode - Count Complete Tree Nodes
- IIS服务器配置及网站发布
- NYOJ 324 猴子吃桃问题
- [数据结构]线性结构——队列
- Java-ReentrantReadWriteLock的简单例子
- poj2299 Ultra-QuickSort (树状数组+离散化)
- leetcode #222 Count Complete Tree Nodes
- 富士山中文离线地图App上线
- [LeetCode]Median of Two Sorted Arrays
- Available Bandwidth paper(3)
- “黑马程序员”Java面向对象(3)
- Mybatis Mapper文件中sql语句用法
- linux下环境变量和crond定时任务 和svn钩子
- 双DFS求强连通分量
- 将数字字符串转换为int型