您的位置:首页 > Web前端 > Node.js

LeetCode "Count Complete Tree Nodes"

2015-06-06 05:35 471 查看
DFS solution is intuitive. I put my BFS solution below:

class Solution {
public:
int countNodes(TreeNode* root)
{
if (!root) return 0;

//  Case 1: complete
int hl = 0, hr = 0;
TreeNode *pl = root;
while(pl)
{
hl ++;
pl = pl->left;
}
TreeNode *pr = root;
while(pr)
{
hr ++;
pr = pr->right;
}
if (hl == hr)
{
return pow(2, hl) - 1;
}

//  Case 2: incomplete
deque<TreeNode *> q;
q.push_back(root);
int pcnt = 1;
int level = 0;

while(!q.empty())
{
auto ptop = q.front();
q.pop_front();
pcnt --;

if (ptop->left)
q.push_back(ptop->left);
if (ptop->right)
q.push_back(ptop->right);

if(pcnt == 0)
{
pcnt = q.size();
level ++;
if (level == hr)
{
break;
}
}
}

return pow(2, hr) - 1 + pcnt;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: