题解 | #完全二叉树结点数#

完全二叉树结点数

https://www.nowcoder.com/practice/512688d2ecf54414826f52df4e4b5693

#coding:utf-8
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head TreeNode类 
# @return int整型
#
class Solution:
    def nodeNum(self , head ):
        # write code here
        #两步:
        #定义递归函数功能:获取每个结点作为根的二叉树节点个数
        #先得到当前结点head的左右子树高度,根据左右子树高度分情况:
        #情况1:左子树高度大于右子树高度,即当前结点head的右子树是满二叉树
        #   总的结点数 = 根节点 + 满二叉树节点个数(右子树) + 完全二叉树节点个数(左子树)
        #情况2:左右子树高度相同,即当前结点head的左子树是满二叉树
            #总的结点数 = 根节点 + 满二叉树节点个数(左子树) + 完全二叉树节点个数(右子树)
        if head == None:
            return 0
        left = self.getHeight(head.left)
        right = self.getHeight(head.right)
        if left != right:
            return 1 + pow(2, right) - 1 + self.nodeNum(head.left)
        else:
            return 1 + pow(2, left) - 1 + self.nodeNum(head.right)

        

    def getHeight(self, node):
        height = 0
        while node != None:
            height += 1
            node = node.left 
        return height

全部评论

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 11:15
点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务