[leetcode-222]Count Complete Tree Nodes(c)

来源:互联网 发布:世界网络多少年了 编辑:程序博客网 时间:2024/06/06 04:12

问题描述:
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.

分析:这道题如果使用暴力搜索的话,时间复杂度为O(N),结果会TLE,然后改用一种递归的方式,每次对一个节点,求它的左节点的深度是否与右节点深度相同,如果相同,那以此为根节点的子树的个数为2^height-1,如果不同,那么就查左子树和右子树之和再加根节点。

代码如下:296ms

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     struct TreeNode *left; *     struct TreeNode *right; * }; */int getHeight(struct TreeNode* root,bool isRight){    int count = 0;    while(root)    {        count++;        if(isRight)            root=root->right;        else            root=root->left;    }    return count;}int countNodes(struct TreeNode* root) {    if(!root)        return 0;    int leftHeight = getHeight(root,false);//左子树的深度    int rightHeight = getHeight(root,true);//右子树的深度    if(leftHeight==rightHeight){        return pow(2,leftHeight)-1;    }else{        return countNodes(root->left)+countNodes(root->right)+1;    }}
0 0
原创粉丝点击