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

Posted FlyingWarrior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };

 

以上是关于LeetCode 222. 完全二叉树的节点个数(Count Complete Tree Nodes)的主要内容,如果未能解决你的问题,请参考以下文章

⭐算法入门⭐《二叉树》简单06 —— LeetCode 222. 完全二叉树的节点个数

算法leetcode222. 完全二叉树的节点个数(rust和go)

算法leetcode222. 完全二叉树的节点个数(rust和go)

LeetCode Java刷题笔记—222. 完全二叉树的节点个数

Leetcode刷题Python222. 完全二叉树的节点个数

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