[leetcode]222. Count Complete Tree Nodes完全二叉树的节点数

Posted stAr_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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;
    }

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

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

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

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

 

以上是关于[leetcode]222. Count Complete Tree Nodes完全二叉树的节点数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode222——Count Complete Tree Nodes

Leetcode 222. Count Complete Tree Nodes

LeetCode OJ 222. Count Complete Tree Nodes

[LeetCode] 222. Count Complete Tree Nodes Java

[Leetcode] Binary search -- 222. Count Complete Tree Nodes

leetcode 222.Count Complete Tree Nodes