题解 | #完全二叉树结点数#

完全二叉树结点数

http://www.nowcoder.com/practice/512688d2ecf54414826f52df4e4b5693

/**
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    int rootHeight(TreeNode* root, int height) {
        if(!root)
            return height;
        int left = rootHeight(root->left, height + 1);
        return left;
    }
    int nodeNum(struct TreeNode* head) {
        if(!head)
            return 0;
        // 计算左右子树的高度
        int l = rootHeight(head->left, 0);
        int r = rootHeight(head->right, 0);
        if(l == r)
            // 如果左右子树相等,则证明根节点左子树为完全二叉树
            // 则计算右子树的节点数在加上 左子树的节点总数+根节点(2^l)
            return nodeNum(head->right) + (1 << l);
        else
            return nodeNum(head->left) + (1 << r);
    }
};
全部评论

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务