小黑代码
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
小黑生活
第一次不在妈妈的陪同下看病做手术,并且打印发票单子
补一张临割前的紧张
秋招不好的形势
家附近的疫情又开始了
辅导员报备
作为宿舍第一个,勇敢地走进了手术室
发热门诊真可怕,要戴口罩!!
这几天室友的带饭,感谢小老黑,和一起歌以咏志的中老黑
疫情开始进攻学校了
换完药一起去买物资啦
偷拍一下中老黑谈恋爱
手术后换药的单子
手术第二天纱布掉了,一个人去急诊
本科生的苦恼,我一笑了之
宿舍也要喝咖啡
一起去换药
大家恐慌地往外跑
一起去报销
最近小黑的步数
今日生活
无数次超人和被超,继续加油
小黑感悟
最近在宿舍什么也没有干,身体一直伴随着疼痛,晚上被疼醒好几次,好在一个星期后的今天疼痛开始减弱了。看着一个又一个熟悉又陌生的面孔匆忙离去,这一离去都可能一辈子再也见不到了,想想最后和室友们呆在一起的这段日子里,心里酸溜溜的,人生的一次次离别真的令人难受。我害怕离别,害怕变老,害怕死去,只有不停地向前走,才能尽可能减少遗憾,才能问心无愧。加油小黑!!