zoukankan      html  css  js  c++  java
  • [leetcode]222. Count Complete Tree Nodes完全二叉树的节点数

    /*
        满二叉树的特点是2^n-1,对于完全二叉树,一个node如果左右子树深度相同,那么
        是一个满二叉树。如果不是,那就把node算上,继续往下看,下边的可能是满二叉树
        由于完全二叉树中有一些子满二叉树,所以可以省时间
         */
        public int countNodes(TreeNode root) {
            if (root==null) return 0;
            int l = getLeft(root);
            int r = getRight(root);
            return (l == r)?(1<<l)-1:countNodes(root.left)+countNodes(root.right)+1;
        }
        //获取左子树深度
        private int getLeft(TreeNode root)
        {
            if (root==null) return 0;
            return getLeft(root.left)+1;
        }
        //获取右子树深度
        private int getRight(TreeNode root)
        {
            if (root==null) return 0;
            return getRight(root.right)+1;
        }

     这个题直接遍历会超时。利用了满二叉树的特点,完全二叉树中满二叉树还是有不少的。

    对于满二叉树的定义,国内的定义除了每个节点都左右子树外,要求所有叶子节点都在一层上,但是国际上的只要前一个条件就可以。这里说的满二叉树是国内定义的那种。

    完全二叉树相对于满二叉树,最后一层可能缺失最右边几个节点。

    以后遇见完全二叉树,可以多考虑下满二叉树的特点。

  • 相关阅读:
    使用mail架包发送邮件javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connec
    java容器 Map Set List
    COJ 1686:记忆化搜索
    POJ 3694:桥
    COJ 1685:贪心+set
    COJ 1687:Set
    COJ 1684:线段树
    POJ 3693:RMQ+后缀数组
    URAL 1297:后缀数组求最长回文串
    POJ 1743:后缀数组
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8371264.html
Copyright © 2011-2022 走看看