zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    大道至简第一章和java理论学时第一节。感受。
    jQuery基础
    JavaScript对象及初始面向对象
    使用JavaScript操作DOM
    JavaScript操作BOM对象
    JavaScript基础
    实体之间的对应关系
    MySQL常用函数
    SQL Server中分离附加数据及生成SQL脚本
    C#中子类构造函数
  • 原文地址:https://www.cnblogs.com/wmx24/p/10273403.html
Copyright © 2011-2022 走看看