题目

https://leetcode.com/problems/count-complete-tree-nodes/

题解

思路参考左程云《程序员代码面试指南》





顺便贴一下草稿

代码


class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) {this.val = val;}TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}class Solution {public int countNodes(TreeNode root) {if (root == null) return 0;int height = 0;TreeNode node = root;while (node != null) {node = node.left;height++;}return bs(root, 1, height);}/*** 计算以node为根的树的节点数量 = 左子树节点数量 + 右子树节点数量 + node节点本身** @param d current depth* @param h height*/public int bs(TreeNode node, int d, int h) {if (node == null) return 0;int rDepth = d; // 右子树的最左节点的深度TreeNode rNode = node.right;while (rNode != null) {rDepth++;rNode = rNode.left;}if (rDepth == h) // 情况1:node左子树为满二叉树(可用公式计算节点个数),右子树继续递归计算return (1 << (h - d) - 1) + bs(node.right, d + 1, h) + 1;else  // 情况2:node右子树为满二叉树(可用公式计算节点个数),左子树继续递归return (1 << (h - d - 1)) - 1 + bs(node.left, d + 1, h) + 1;}
}

leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)相关推荐

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

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

  2. LeetCode 222. Count Complete Tree Nodes 题解——Java

    题目链接:https://leetcode.com/problems/count-complete-tree-nodes/#/description 题目要求:计算完全二叉树的节点个数 思路:首先想到 ...

  3. 222 Count Complete Tree Nodes

    1,这道题如果纯用递归数点而不利用其为一个complete binary tree的话会超时. 2.为了利用这个条件,比较左右两子数的高度:1, 如果相等则左子树为完全二叉树 2, 如果不等, 则右子 ...

  4. leetcode 222 Count Complete Tree Nodes

    今天做了一道leetcode题,刚开始是暴力破解,发现special judge, very large tree 过不去,然后一顿想,一顿查,发现可以运用complete binary tree 的 ...

  5. Middle-题目95:222. Count Complete Tree Nodes

    题目原文: Given a complete binary tree, count the number of nodes. 题目大意: 给出一个完全二叉树,求节点数. 题目分析: 如果直接递归数节点 ...

  6. 222. Count Complete Tree Nodes

    题目: Given a complete binary tree, count the number of nodes. Definition of a complete binary tree fr ...

  7. leetcode 222.完全二叉树的节点个数 Java

    完全二叉树的节点个数 题目链接 描述 示例 初始代码模板 代码 题目链接 https://leetcode-cn.com/problems/count-complete-tree-nodes/ 描述 ...

  8. LeetCode Count Complete Tree Nodes(二分法)

    问题:给出一个完全二叉树,求其结点个数 思路:第一种方式时直接使用递归法,将其左子树个数加上右子树个数再加上根结点 第二种方式二分法,因为完全二叉树除了最后一层外,其它都满足有2^i个结点,而最后一层 ...

  9. Count Complete Tree Nodes

    https://leetcode.com/problems/count-complete-tree-nodes/ 宽度优先搜索方法,超时!! /*** Definition for a binary ...

最新文章

  1. 实际操作_MFC修改控件的Tab顺序
  2. spark 资源参数调优
  3. DrawerLayout侧滑详解
  4. iBatis应用之获取表的元数据
  5. linux系统适合电脑小白吗,linux小白说说用linux的感受
  6. MPU6050开发 -- 在 C52 单片机上测试
  7. uva 156 Ananagrams
  8. bootstrap的td可以增加title样式_3.CSS样式的三种使用方式
  9. 【费用流】摘取作物(jozj 3447)
  10. 第一阶段:前端开发_Mysql——表与表之间的关系
  11. OpenSSH 6.7 发布 开源ssh服务器软件
  12. 在玩客云上部署code-server
  13. 使用nodejs爬前程无忧前端技能排行(半半成品)
  14. 我也是不得不说我的学习能力下降了,这两天都没有完成一个模块
  15. 数据安全治理白皮书_天融信联合发布《自动驾驶数据安全白皮书》
  16. python差分进化算法_差分进化算法(differential evolution)的Python实现
  17. 2016中国APP分类排行榜参选入围产品公示
  18. 超赞的8款开源聊天软件
  19. wifi信号桥怎么设置_手机设置路由器WDS桥连方法
  20. 小程序源代码 古诗词

热门文章

  1. POJ - 3254 Corn Fields(状压dp)
  2. Fastai-数据准备
  3. BZOJ3209(n的二进制表示中1的个数的乘积)
  4. C++ COM编程之什么是接口
  5. GitLab 自动触发 Jenkins 构建
  6. 云原生网络代理(MOSN)的进化之路
  7. 大厂提供什么样的软硬件来吸引人才?
  8. 醍醐灌顶 | 我们谈论的Exactly once到底是什么?
  9. Linux 思维导图整理(建议收藏)
  10. 中秋水文 | 安利一发国漫