C/C++教程

LeetCode 222. Count Complete Tree Nodes

本文主要是介绍LeetCode 222. Count Complete Tree Nodes,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

LeetCode 222. Count Complete Tree Nodes (完全二叉树的节点个数)

题目

链接

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

问题描述

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

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

示例

输入:root = [1,2,3,4,5,6]
输出:6

提示

树中节点的数目范围是[0, 5 * 104]
0 <= Node.val <= 5 * 104
题目数据保证输入的树是 完全二叉树

思路

借助完全二叉树的性质解题。

如果左右子树深度一样,那么左子树一定是满的,树点数为左子树(公式)+右子树+根节点。

如果深度不一样,那么右子树一定是满的,答案为左子树+右子树(公式)+根节点。

复杂度分析

时间复杂度 O(logn2)
空间复杂度 O(1)

代码

Java

    public int countNodes(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftDepth = getDepth(root.left);
        int rightDepth = getDepth(root.right);
        if (leftDepth == rightDepth) {
            return (int) (Math.pow(2, leftDepth)) + countNodes(root.right);
        } else {
            return (int) (Math.pow(2, rightDepth)) + countNodes(root.left);
        }
    }

    public int getDepth(TreeNode root) {
        int depth = 0;
        while (root != null) {
            root = root.left;
            depth++;
        }
        return depth;
    }
这篇关于LeetCode 222. Count Complete Tree Nodes的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!