对于一般的二叉树,统计节点数目遍历一遍就可以了,但是这样时间复杂度O(n),一下就被卡住了。

这题首先要明白的是,我们只需要知道叶子节点的数目就能统计出总节点树。

想法1:

  既然是完全二叉树,我肯定是从左子树开始看,如果左子树不完整,右子树就不用再遍历了。由此形成一个递归的搜索过程,先搜索左子树,如果不完整,直接停止搜索,统计完毕;否则,还要再搜索右子树。

  这样就能避开完全搜索遍历整棵树,但是当树接近满树的时候实际上还是将整颗树遍历了一遍。

想法2:

  完全二叉树不同于满树的一点是,我们只能肯定它的最左边那个叶子节点肯定是存在的(这里说存在不太准确,实际就把完全二叉树当满树看,然后那些不满的地方就认为是叶子节点不存在)。所以一颗完全二叉树的高度只需要一路向左就能求得。现在告诉你一颗完全二叉树可能不是满树,从根节点的角度,就要看,到底从哪开始不满的。

按照定义,不满的节点肯定在右边。如果我们求解根节点的右子树的高度=H - 1,说明左子树肯定是满的,不用再看了;否则,右节点高度 = H - 2,说明root->right的叶节点都缺了,右边不用再看了。

  有没有发现这种想法使得我们几乎一次排除了一半的元素,所以这题有一个标签叫做binary search,因为感觉想法上很像。

    int countNodes(TreeNode* root) {
int height = 0;
auto p = root;
while(p != NULL){
height++;
p = p->left;
}
if(height < 2)
return height;
int countLeaf = 0;
int curHeight = height;
while(root){
auto pr = root->right;
int heightR = 0;
while(pr != NULL){
heightR++;
pr = pr->left;
}
if (heightR == 0){
countLeaf+= 1;
break;
}
else if(heightR == curHeight - 1){
//we don't need to look at the left child any more
//because it must be full
countLeaf += (1 << (heightR - 1));
root = root->right;
}
else{
//we don't need to look at the right child any more
//because there no leaf node
root = root->left;
}
curHeight -= 1;
}
return countLeaf + (1 << (height - 1)) - 1;
}

LeetCode222 Count Complete Tree Nodes的更多相关文章

  1. LeetCode222——Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

  2. leetcode面试准备:Count Complete Tree Nodes

    1 题目 Given a complete binary tree, count the number of nodes. In a complete binary tree every level, ...

  3. leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes

    完全二叉树的定义:若设二叉树的深度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树. 解题思路:将树按照层进行遍历,如果 ...

  4. 完全二叉树的节点个数 Count Complete Tree Nodes

    2018-09-25 16:36:25 问题描述: 问题求解: 单纯遍历了一遍,emmm,果然TLE. 解题思路就是比较左边树高度和右边树高度,如果相等,那么就是一个满二叉树,返回1 << ...

  5. 【LeetCode】222. Count Complete Tree Nodes 解题报告(Python)

    [LeetCode]222. Count Complete Tree Nodes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个 ...

  6. 【刷题-LeetCode】222. Count Complete Tree Nodes

    Count Complete Tree Nodes Given a complete binary tree, count the number of nodes. Note: Definition ...

  7. LeetCode Count Complete Tree Nodes

    原题链接在这里:https://leetcode.com/problems/count-complete-tree-nodes/ Given a complete binary tree, count ...

  8. [Swift]LeetCode222. 完全二叉树的节点个数 | Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Note: Definition of a complete binary tree ...

  9. [LeetCode] Count Complete Tree Nodes 求完全二叉树的节点个数

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

随机推荐

  1. selenium+python笔记8

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 定制浏览器 """ imp ...

  2. robotframework笔记19

    后处理输出 使用时自动测试 在测试执行报告和日志生成,并使用它 分别允许创建自定义报告和日志以及结合 和合并的结果. 使用Rebot 简介 rebot [options] robot_outputs ...

  3. robotframework笔记2

    法文件和目录 层次结构安排测试用例构建如下: 在创建测试用例 测试用例文件 . 自动创建一个测试用例文件 测试套件 包含 测试用例文件. 一个目录包含测试用例文件形成一个更高级别的测试 套件. 这样一 ...

  4. SQL SERVER数据库索引、外键查找

    1.索引查找 select a.name as tabname ,h.name as idname,h.type_descfrom sys.objects as a right join sys.in ...

  5. Qt之保持GUI响应

    简述 Qter们经常遇到由于耗时操作造成GUI阻塞的问题.其实,这个问题并不难克服,可以采用许多不同的方式,下面我会列举一些可选范围,根据使用情况进行处理. 简述 执行耗时操作 手动事件处理 使用一个 ...

  6. hdu----(4686)Arc of Dream(矩阵快速幂)

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  7. 20145236 冯佳 《Java程序设计》第2周学习总结

    20145236 <Java程序设计>第2周学习总结 教材学习内容总结 一.Java的基本类型. 在Java中的基本类型主要可区分为整数.字节.浮点数字符与布尔. •整数: 类型 长度 范 ...

  8. uva 242

    242 - Stamps and Envelope Size Time limit: 3.000 seconds  Stamps and Envelope Size  Philatelists hav ...

  9. CSS 框模型——规定了元素框处理元素内容、内边距、边框和外边距的方式

    转自:http://www.w3school.com.cn/css/css_boxmodel.asp 要知道在父元素:float, rel, abs位置情况下,box模型的变换情况,请见:http:/ ...

  10. 使用Vibrator控制手机振动

    import android.os.Bundle;import android.os.Vibrator;import android.app.Activity;import android.app.S ...