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

222. Count Complete Tree Nodes

2016-09-06 16:29 351 查看
题:

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.

tags: binary search

A 最直观的解法。dfs将树中每个节点都遍历并计数。时间复杂度O(N)。

    但是超时了。

B tags是binary search。每一步,我们都可以确定左或者右子树的节点数。具体他,可以判断左右节点最最左边的层数是否相同,如果相同,则左子树为满二叉树,若不同则右子树为满二叉树。满二叉树的节点数容易计算,然后再递归地求解非满二叉树的节点数。

求解本题还要注意两点:

1)用<<代替pow(),算法能快100多ms。为啥快这么多?

2)在对子树递归时,将上次计算的树的高度用参数传入,避免不必要的计算。也能快上个几十ms。

class Solution {
public:
int countNodes(TreeNode*& root) {
return dfs(root, 0);
}
int dfs(TreeNode*& root, int l){
if(root==NULL) return 0;
int r = 0;
TreeNode* node = root->left;
if(l==0){
while(node!=NULL){
l++;
node = node->left;
}
}
node = root->right;
while(node!=NULL){
r++;
node = node->left;
}
if(l==r) return (1<<l)+dfs(root->right, r-1);
else return (1<<r)+dfs(root->left, l-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息