1 真题
2 解析
难度系数:⭐⭐⭐
考察题型:数据结构 动态规划
涉及知识点:二叉树 树型DP
思路分析:
没有思路肿么办?先暴力破解试试看吧!时间超了也有15分能拿。
先根据题目思路,定义一个树节点类,再初始化结点。
定义一个递归函数,求树的最大高度,最后遍历即可。
一步步转化,求二叉树最高高度->孩子结点个数
3 代码
#树形结构版
#定义结点类
class node():
def __init__(self,val):
self.val=val #父结点值
self.child=[] #结点孩子
tree=[None,node(val=0)] #初始化树
#初始化树列表
n=int(input())
for i in range(2,n+1):
m=int(input())
tree.append(node(val=m))
tree[m].child.append(i)
#最大长度-递归函数
def maxlen(n:node):
if len(n.child)==0: #无孩子,高度为0
return 0
else:
return len(n.child)+max(maxlen(tree[temp]) for temp in n.child)
print(maxlen(tree[1])) #从根节点开始遍历
#二维列表法
a = [[]for i in range(100001)] #测试数据最大为十万
n = int(input()) #测试数量:5
for i in range(2, n + 1): #结点编号:2,3,4,5
fu = int(input()) #输入父节点:1,1,1,2
a[fu].append(i) #测试结果:[[], [2, 3, 4], [5], [],[]]
#树型DP
def dfs(t):
ans = 0
for i in range(len(a[t])): #t:1 len:3 i:0,1,2
ans = max(ans, dfs(a[t][i])+len(a[t]))
return ans
print(dfs(1))
📍我写的是关于蓝桥杯的系列题解,感谢关注我的朋友们,我会持续输出高质量文章💪🏻