zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9774147.html
Copyright © 2011-2022 走看看