leetCode(19):Count Complete Tree Nodes

Given acompletebinary tree, count the number of nodes.

Definition of a complete binary tree from: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);}};

有的旅行是为了拓宽眼界,浏览风景名胜。

leetCode(19):Count Complete Tree Nodes

相关文章:

你感兴趣的文章:

标签云: