美文网首页Leetcode每日两题程序员
Leetcode 222. Count Complete Tre

Leetcode 222. Count Complete Tre

作者: ShutLove | 来源:发表于2017-12-05 11:41 被阅读22次

    Given a complete binary tree, count the number of nodes.Definition of a complete binary tree from [Wikipedia].
    In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible.
    nodes inclusive at the last level h.

    思路:
    自己只想到了用宽度优先搜索来计算总节点数,时间复杂度是O(n)。
    查看discuss中解答,发现了很多O(logn)解法,其核心想法是,通过计算根节点左右子树的高度,判断树最后一行中,最后一个叶子节点是在左子树还是右子树上。通过这样一次判断,可以立即减少一倍的搜索范围,之后只需要递归查找最后叶子节点所在的子树即可。

    int height(TreeNode root) {
        return root == null ? -1 : 1 + height(root.left);
    }
    public int countNodes(TreeNode root) {
        int h = height(root);
        return h < 0 ? 0 :
                height(root.right) == h-1 ? (1 << h) + countNodes(root.right)
                        : (1 << h-1) + countNodes(root.left);
    }
    

    相关文章

      网友评论

        本文标题:Leetcode 222. Count Complete Tre

        本文链接:https://www.haomeiwen.com/subject/cfgqixtx.html