zoukankan      html  css  js  c++  java
  • 【力扣】222. 完全二叉树的节点个数

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

    说明:

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

    示例:

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

    输出: 6


    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/count-complete-tree-nodes
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    使用递归:

    时间复杂度、空间复杂度都O(n)

    class Solution {
    
        int number = 0;
        public int countNodes(TreeNode root) {
            if(root == null){
                return number;
            }
            dfs(root);
            return number;
        }
    
        public void dfs(TreeNode root){
            if(root == null){
                return;
            }
            number++;
            dfs(root.left);
            dfs(root.right);
        }
    }

    但并没有使用完全二叉树的特点

    public int countNodes(TreeNode root) {
            
    
            //如何利用完全二叉树的特点
    
            //首先算出来当前二叉树的高度
            int tree = treeHeight(root);
    
            if(tree == 0 || tree == 1){
                //如果树的高度是 0 或者1 则直接返回
                return tree;
            }
    
            //再计算出右子树的高度
            int rightTree = treeHeight(root.right);
    
            //如果右子树的高度和整个树的高度 -2 相等,那么说明,这棵树的右子树为满二叉树
            if(rightTree == tree - 2){
                //那么这个二叉树的右子树的节点个数就是固定的
                //那么只需要关心左子树的节点的个数了
                return (1 << rightTree) + countNodes(root.left);
            } else {
                //如果右子树的个数是 整个树的高度 -1 相等,那么说明,这个树的左子树是满二叉树
                //那么就只需要关心右子树的节点的个数了
                return (1 << (tree - 1)) + countNodes(root.right);
            }
        }

    参考:https://leetcode-cn.com/problems/count-complete-tree-nodes/solution/javadai-ma-tu-wen-xiang-jie-ji-bai-liao-100de-yong/

    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    HDU3910(数学期望题,题目难懂)
    HDU2389(二分图匹配Hopcroft-Carp算法)
    二分图详解
    巴什博弈、威佐夫博弈、尼姆博弈
    HDU2819(二分图匹配,记录过程)
    查找外键未创建索引
    acl使用示例
    oracle数据库备份任务
    集中备份相关
    集中备份项目实施方案
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/14034701.html
Copyright © 2011-2022 走看看