LeetCode 222. 完全二叉树的节点个数(Count Complete Tree Nodes)

题目描述

 

给出一个完全二叉树,求出该树的节点个数。

说明:

完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

示例:

输入: 
    1
   / \
  2   3
 / \  /
4  5 6

输出: 6

 

解题思路

 

 从根节点开始分别判断左右子树的高度:

  • 若左子树高度等于右子树,说明左子树一定为满二叉树,可得左子树的总节点个数,然后递归求右子树的节点数;
  • 若左子树高度大于右子树,说明右子树一定为满二叉树,可得右子树的总节点个数,然后递归求左子树的节点数。

 

代码

 

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     int countNodes(TreeNode* root) {
13         if(root == NULL) return 0;
14         int left = height(root->left), right = height(root->right);
15         if(left == right)
16             return (1 << left) + countNodes(root->right);
17         else 
18             return countNodes(root->left) + (1 << right);
19     }
20     int height(TreeNode* root){
21         if(root == NULL)
22             return 0;
23         return height(root->left) + 1;
24     }
25 };

 

posted @ 2019-01-15 18:04  FlyingWarrior  阅读(380)  评论(0编辑  收藏  举报