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

LeetCode222 Count Complete Tree Nodes

2016-01-04 20:36 381 查看

题目链接:

https://leetcode.com/problems/count-complete-tree-nodes/

题目描述:

求一个完全二叉树的节点个数。

题目分析:

需要注意的是遍历的方式求解节点个数会超时,时间复杂度为O(n)。利用完全二叉树与满二叉树节点个数的特性。满二叉树的节点个数为2^h-1,h为树高。先判断该完全二叉树是不是满二叉树,如果是直接返回结果,如果不是再递归求解。

如果节点左子树最左边的深度,与节点右子树最右边的深度相等,则以该节点为根节点的树是满二叉树,如果不等,则以该节点为根节点的树的节点个数=其左子树的节点个数+其右子树的节点个数+本身。

代码:

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