小黑跟室友组团割完疼了一个星期,现在还肿着并准备下床继续干的leetcode之旅:2049. 统计最高分的节点数目

小黑代码

class TreeNode:
    def __init__(self, val = 0, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right
        self.sum = -1
        self.value = -1
class Solution:
    def countHighestScoreNodes(self, parents: List[int]) -> int:
        
        self.parents = parents
        # 最大乘积
        self.max_value = -1
        # 结点序列
        self.nodes= [TreeNode() for _ in range(len(parents))]
        # 建立结点序列
        for i,p in enumerate(parents):
            if p!=-1:
                if self.nodes[p].left:
                    self.nodes[p].right = self.nodes[i]
                else:
                    self.nodes[p].left = self.nodes[i]
                self.nodes[i].val = i
        # 根结点
        self.root = self.nodes[0]
        # 计算子结点个数
        def dfs_count(node):
            if not node:
                return 0
            left_num = dfs_count(node.left)
            right_num = dfs_count(node.right)
            node.sum = right_num + left_num + 1
            return node.sum
        # 比较并记录乘积
        def dfs(node):
            if not node:
                return
            value = 1
            if node != self.root:
                value *= (self.root.sum - node.sum)
            if node.left:
                value *= node.left.sum
            if node.right:
                value *= node.right.sum
            if value > self.max_value:
                self.max_value = value
            node.value = value
            dfs(node.left)
            dfs(node.right)
        dfs_count(self.root)
        dfs(self.root)
        
        count = 0
        for node in self.nodes:
            if node.value == self.max_value:
                count += 1

        return count

在这里插入图片描述

深度优先法

class Solution:
    def countHighestScoreNodes(self, parents: List[int]) -> int:
        # 结点个数
        n = len(parents)
        # 建立孩子映射数组
        childrens = [[] for _ in range(n)]  
        for node, p in enumerate(parents):
            if p!=-1:
                childrens[p].append(node)

        # 定义最值、次数变量
        cnt = 0
        max_value = -1

        # 递归函数
        def dfs(node):
            # 剩余结点变量
            rest_nodes = n-1
            # 乘积变量
            value = 1
            # 遍历每一个孩子
            for child in childrens[node]:
                child_sum = dfs(child)
                value *= child_sum
                rest_nodes -= child_sum
            # 判断是否根结点
            if node:
                value *= rest_nodes
            # 最值
            nonlocal max_value, cnt
            if value > max_value:
                max_value = value
                cnt = 1
            elif value == max_value:
                cnt += 1
            return n - rest_nodes
        # 将跟结点传入
        dfs(0)
        return cnt

在这里插入图片描述

小黑生活

第一次不在妈妈的陪同下看病做手术,并且打印发票单子

请添加图片描述
在这里插入图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

补一张临割前的紧张

请添加图片描述

秋招不好的形势

请添加图片描述
在这里插入图片描述
在这里插入图片描述

家附近的疫情又开始了

请添加图片描述
在这里插入图片描述

辅导员报备

在这里插入图片描述

作为宿舍第一个,勇敢地走进了手术室

在这里插入图片描述

发热门诊真可怕,要戴口罩!!

在这里插入图片描述

这几天室友的带饭,感谢小老黑,和一起歌以咏志的中老黑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

疫情开始进攻学校了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

换完药一起去买物资啦

在这里插入图片描述
请添加图片描述
请添加图片描述

偷拍一下中老黑谈恋爱

在这里插入图片描述

手术后换药的单子

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

手术第二天纱布掉了,一个人去急诊

在这里插入图片描述

本科生的苦恼,我一笑了之

在这里插入图片描述

宿舍也要喝咖啡

请添加图片描述
在这里插入图片描述

一起去换药

在这里插入图片描述
在这里插入图片描述

大家恐慌地往外跑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一起去报销

在这里插入图片描述

最近小黑的步数

在这里插入图片描述

今日生活

在这里插入图片描述
请添加图片描述
请添加图片描述
请添加图片描述
在这里插入图片描述
在这里插入图片描述

无数次超人和被超,继续加油

在这里插入图片描述

小黑感悟

最近在宿舍什么也没有干,身体一直伴随着疼痛,晚上被疼醒好几次,好在一个星期后的今天疼痛开始减弱了。看着一个又一个熟悉又陌生的面孔匆忙离去,这一离去都可能一辈子再也见不到了,想想最后和室友们呆在一起的这段日子里,心里酸溜溜的,人生的一次次离别真的令人难受。我害怕离别,害怕变老,害怕死去,只有不停地向前走,才能尽可能减少遗憾,才能问心无愧。加油小黑!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值