首页 > 其他 > 详细

222.Count Complete Tree Nodes

时间:2018-11-05 15:52:47      阅读:144      评论:0      收藏:0      [点我收藏+]

Given a complete binary tree, count the number of nodes.

Note:

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. It can have between 1 and 2h nodes inclusive at the last level h.

Example:

Input:

    1
   /   2   3
 / \  /
4  5 6

Output: 6

Solution1:(TLE)

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def countNodes(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root is None:
            return 0
        return 1+self.countNodes(root.left)+self.countNodes(root.right)

Solution2:(TLE) why!

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def countNodes(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root is None:
            return 0
        def leftheight(root):
            count = 0
            while root:
                count += 1
                root = root.left
            return count
        def rightheight(root):
            count = 0
            while root:
                count += 1
                root = root.right
        l = leftheight(root)
        r = rightheight(root)
        if l==r:
            return 2**l-1
        return 1 + self.countNodes(root.left) + self.countNodes(root.right)

Solution3:

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def countNodes(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if self.countLeft(root) == self.countRight(root):
            return (1<<self.countLeft(root)) - 1
        else:
            return self.countNodes(root.left) + self.countNodes(root.right) + 1

    def countLeft(self, root):
        ans = 0
        while root:
            ans += 1
            root = root.left
        return ans

    def countRight(self, root):
        ans = 0
        while root:
            ans += 1
            root = root.right
        return ans

222.Count Complete Tree Nodes

原文:https://www.cnblogs.com/bernieloveslife/p/9774147.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!