leetCode(19):Count Complete Tree Nodes
来源:互联网 发布:华为网络 编辑:程序博客网 时间:2024/06/07 06:04
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 2hnodes inclusive at the last level h.
代码一适合任何形式的二叉树,代码二和代码三只适合本题所述形式的二叉树。
代码一:最简单,但时间超限
int countNodes(TreeNode* root){if(NULL==root)return 0;int count(0);count=1+countNodes(root->left)+countNodes(root->right);return count;}
代码二:采用层序遍历的方式,统计层数和最后一层结点个数,还是时间超限
<pre name="code" class="cpp">int countNodes(TreeNode* root){queue<TreeNode*> nodes;if(NULL==root)return 0;nodes.push(root);int depth(1);int result(0);while(!nodes.empty()){int length=nodes.size();int i=0;int k(0);while(i<length){TreeNode* tmpNode=nodes.front();nodes.pop();if(tmpNode->left){nodes.push(tmpNode->left);k++;}elsebreak;if(tmpNode->right){nodes.push(tmpNode->right);k++;}elsebreak;i++;}if(i<length){result=(1<<depth)-1+k;break;}depth++;}return result;}
代码三:在代码一上的扩展,在网上看别人的。因为是完全二叉树,所以有且仅有最后一层和倒数第二层有叶子结点。首先统计最左边和最右边的深度,如果深度一致,说明是满二叉树(注意题目条件),则可以直接求出;如果不一致,则分别求左右孩子结点的结点个数。
<pre name="code" class="cpp">/** * 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(NULL==root) return 0; int height1(0),height2(0); TreeNode* p=root; while(p) { p=p->left; height1++; } TreeNode* q=root; while(q) { q=q->right; height2++; } if(height1==height2) return (1<<height1)-1; return 1+countNodes(root->left)+countNodes(root->right); }};
0 0
- leetCode(19):Count Complete Tree Nodes
- [LeetCode] Count Complete Tree Nodes
- leetcode - Count Complete Tree Nodes
- Leetcode: Count Complete Tree Nodes
- [LeetCode]Count Complete Tree Nodes
- LeetCode Count Complete Tree Nodes
- [leetcode] Count Complete Tree Nodes
- leetCode:Count Complete Tree Nodes
- [LeetCode] Count Complete Tree Nodes
- leetcode Count Complete Tree Nodes
- #leetcode#Count Complete Tree Nodes
- leetcode Count Complete Tree Nodes
- LeetCode Count Complete Tree Nodes
- LeetCode - Count Complete Tree Nodes
- leetcode: Count Complete Tree Nodes
- leetcode--Count Complete Tree Nodes
- [LeetCode] Count Complete Tree Nodes
- Leetcode: Count Complete Tree Nodes
- IOS 开发 Objective-C 入门1
- [C++ primer]第二章笔记--变量和基本类型
- 对HOWTO_create_a_traffic_generator的更正
- 搜索帮助中根据界面条件显示实现方法一
- Java "object reference" demo
- leetCode(19):Count Complete Tree Nodes
- WCF医院管理系统技术解析(十二)化验登记
- POJ 1477 && HDU 1326 Box of Bricks(水~)
- Afaria 7 SP5中的SSP URL
- Java--Reflect(反射)专题4——获取成员变量以及构造函数信息
- Extract ISBN From PDF and EPUB and Query Matadata From ISBN Database
- c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介
- Arrays数组。。
- 从Quagga到DCE的处理流程