• 222.Count Complete Tree Nodes


    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
    
  • 相关阅读:
    swap文件查看
    内核调试神器SystemTap 转摘
    RPM软件包管理的查询功能 转
    systemtap跟踪C
    mysql 阿里内核人员
    systemtap 调试postgrel
    数据库大会
    solaris 软件包地址
    java实现大文件上传方案
    java实现大文件上传技术
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9774147.html
Copyright © 2020-2023  润新知