Leetcode 222. 完全二叉树的节点个数(中等)

题目:

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
*
* 完全二叉树
* 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h
* 层,则该层包含 1~ 2^h 个节点。
 
思路:labuladong
对于满二叉树,可以通过2^n-1的方式,先计算深度在计算个数。对于普通二叉树遍历所有结点。
那么对于完全二叉树,它肯定是由满二叉树以及普通二叉树组成,因此对于满二叉树的部分,可以直接计算。对于其余部分遍历计算
 
class Solution {
public:
    int countNodes(TreeNode* root) {
        if(root==nullptr){
            return 0;
        }
        TreeNode* left=root->left;
        int l=1;
        while(left!=nullptr){
            left=left->left;
            l++;
        }
        TreeNode* right=root->right;
        int r=1;
        while(right!=nullptr){
            right=right->right;
            r++;
        }
        if(l==r){
            return pow(2,l)-1;
        }
        return 1+countNodes(root->left)+countNodes(root->right);
    }
};

 

 
posted @ 2022-02-15 11:34  鸭子船长  阅读(20)  评论(0编辑  收藏  举报