当前位置:网站首页>【二叉树】统计最高分的节点数目
【二叉树】统计最高分的节点数目
2022-08-03 13:01:00 【豪冷啊】
0x00 题目
给你一棵根节点为 0
的 二叉树
它总共有 n
个节点
节点编号为 0
到 n - 1
同时给你一个下标从 0
开始的整数数组 parents
表示这棵树
其中 parents[i]
是节点 i
的父节点
由于节点 0
是根,所以 parents[0] == -1
一个子树的 大小
为这个子树内节点的数目
每个节点都有一个与之关联的 分数
求出某个节点分数的方法是
将这个节点和与它相连的边全部 删除
剩余部分是若干个 非空 子树
这个节点的 分数 为所有这些子树 大小的乘积
请你返回有 最高得分
节点的 数目
0x01 思路
删除一个节点最多把整颗树分割成三
部分:左
子树、右
子树、父
节点及父节点的另一半子树
遍历每个节点的左右子树的数目
第三部分的数量就等于总
节点数 减去 左右
子树的数目 再减 1
三者相乘
就是分数
没有的部分用 1
代替
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
解法:
func countHighestScoreNodes(_ parents: [Int]) -> Int {
let count = parents.count
var maxScore: Int = 0
var ans: Int = 0
var nodes: [Int:TreeNode] = [:]
func dfs(_ root: TreeNode?) -> Int {
guard let root = root else { return 0 }
// 左
let leftCount = dfs(root.left)
// 右
let rightCount = dfs(root.right)
// 剩下部分
let threeCount = count - leftCount - rightCount - 1
let left = leftCount == 0 ? 1 : leftCount
let right = rightCount == 0 ? 1 : rightCount
let three = threeCount == 0 ? 1 : threeCount
// 乘积
let score = left * right * three
if score == maxScore {
ans += 1
}else if score > maxScore {
maxScore = score
ans = 1
}
return leftCount + rightCount + 1
}
// 构建二叉树
for i in 0..<count {
nodes[i] = TreeNode()
}
for i in 1..<count {
let child = nodes[i]
let parent = nodes[parents[i]]!
if parent.left == nil {
parent.left = child
}else{
parent.right = child
}
}
_ = dfs(nodes[0])
return ans
}
0x03 我的小作品
欢迎体验我的作品之一:小编辑器-XCompiler
在线编辑器App Store
搜索即可~
边栏推荐
- An introduction to basic tools for selecting line tools (package church)
- An introduction to the pen tool, pencil tool and brush tool
- TiFlash 计算层概览
- Jmeter使用
- 可视化图表设计Cookbook
- 使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片
- leetcode/字符串中的所有变位词(s1字符串的某个排列是s2的子串)的左索引
- Golang arrays and slices
- Multithreading in Redis 6
- Golang dictionary map
猜你喜欢
云计算服务主要安全风险及应对措施初探
An introduction to the camera
PyTorch builds a classification network model (Mnist dataset, fully connected neural network)
力扣刷题 每日两题(一)
Sogou news - dataset
An动画基础之元件的影片剪辑动画与传统补间
Notepad++ install jsonview plugin
TensorFlow离线安装包
Oracle is installed (system disk) and transferred from the system disk to the data disk
[R] Use grafify for statistical plotting, ANOVA, intervention comparisons, and more!
随机推荐
PyTorch构建分类网络模型(Mnist数据集,全连接神经网络)
15. PARTITIONS「建议收藏」
PyTorch构建神经网络预测气温(数据集对比,CPU与GPU对比)
实数取整写入文件(C语言文件篇)
Yahoo! Answers-数据集
【蓝桥杯选拔赛真题48】Scratch跳舞机游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
汉源高科G8032标准ERPS环网交换机千兆4光10电工业以太网交换机环网+WEB管理+SNMP划VLAN
安全自定义 Web 应用程序登录
[Deep Learning] Overview of Efficient and Lightweight Semantic Segmentation
Redis connection pool tool class
[OpenCV] Cascade classifier training model
来广州找工作有一个多月了,今天终于有着落了,工资7000
TiFlash 计算层概览
超大规模的产业实用语义分割数据集PSSL与预训练模型开源啦!
The Yangtze river commercial Banks to the interview
软件测试自学还是报班好?
Jmeter use
An动画基础之元件的影片剪辑效果
浅谈低代码平台远程组件加载方案
PyTorch builds a neural network to predict temperature (dataset comparison, CPU vs GPU comparison)