• Leetcode** 222. Count Complete Tree Nodes


    Description: Given the root of a complete binary tree, return the number of the nodes in the tree.

    According to Wikipedia, every level, except possibly the last, is completely filled in a complete binary tree, 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.

    Link: 222. Count Complete Tree Nodes

    Examples:

    Example 1:
    
    Input: root = [1,2,3,4,5,6]
    Output: 6
    
    Example 2:
    Input: root = []
    Output: 0
    
    Example 3:
    Input: root = [1]
    Output: 1

    思路: 从头遍历一次,O(n). 怎样才能更快呢?

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

    class
    Solution(object): def countNodes(self, root): """ :type root: TreeNode :rtype: int """ self.res = 0 if not root: return 0 self.res += 1 if root.left: self.res += self.countNodes(root.left) if root.right: self.res += self.countNodes(root.right) return self.res

    深度为 h 的满二叉树,节点个数为 2 ^ h - 1. 完全二叉树的最后一层节点不一定满,从左到右填充。

    首先计算左子树的深度l. 右子树的深度r; 如果 l == r,说明左子树是满二叉树,右子树是完全二叉树,总节点数 = 2 ** l -1 + 1 (root node) + countNodes(root.right)如果l > r,说明右子树是满二叉树,左子树是完全二叉树, 总节点数 = 2 ** r -1 + 1 (root node) + countNodes(root.left)。计算深度时,因为是完全二叉树,从左边排起,只要一直向下数做节点就好。

    class Solution(object):
        def countNodes(self, root):
            """
            :type root: TreeNode
            :rtype: int
            """
            if not root: return 0
            leftdepth = self.getdepth(root.left)
            rightdepth = self.getdepth(root.right)
            if leftdepth == rightdepth:
                return pow(2,leftdepth) + self.countNodes(root.right)
            else:
                return pow(2,rightdepth) + self.countNodes(root.left)
        
        def getdepth(self, root):
            depth = 0
            while root:
                depth += 1
                root = root.left
            return depth
            
        # def getdepth(self, root):
        #     if not root:
        #         return 0
        #     return 1 + self.getdepth(root.left)

    Reference: https://blog.csdn.net/fuxuemingzhu/article/details/80781666

    日期: 2021-04-15 生活总不会让人太难

  • 相关阅读:
    Web相关工具
    web服务器之ApacheCookie 和 session
    web服务器之Apache语法与使用
    Java高并发3-中断线程以及isInterrupted与interrupted区别
    从零开始学VUE之Vue CLI(Cli 2.x 初始化项目)
    从零开始学VUE之Vue CLI(全局安装cli-init)
    从零开始学VUE之Vue CLI(全局安装 CLI)
    从零开始学VUE之淘宝镜像Cnpm安装
    IDEA 过期时间 试用时间 重置插件
    ElementUI el-checkbox 点击Label不取消复选框的选中状态
  • 原文地址:https://www.cnblogs.com/wangyuxia/p/14662230.html
Copyright © 2020-2023  润新知