【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day18 | 左kid右兄弟 | 真题代码解析
每天刷一道题,话不多说,先刷近两年的题吧,现在是2021年的真题了,如果有一起的可以加入我们!!!
一起来刷题,冲击国赛!!!
2021年第十二届蓝桥杯赛题总览
2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!
左孩子右兄弟 (题目)
(本题总分:15分)
官方练习系统:https://www.lanqiao.cn/problems/1462/learning/
—>【问题描述】
解析
通过阅读题干,本题——难度中等:⭐⭐⭐
考察类型:链表、递归
考察知识点:递归
分析:
这道题是考链表。可以发现左孩子右兄弟的存储方法,对于树上的一个节点,它的所有儿子都会按照某种顺序依次成为它的右儿子,右儿子的右儿子,右儿子的右儿子的右儿子…依次类推深度不断增加。
这里就有一个递归的结论:对于一个节点,只有把它的所有儿子形成的子树中,转化为二叉树深度最深的儿子放到最下边,才会最优。
对于每个结点的所有儿子顺序选择,只需要选择它的儿子形成的子树中转化成二叉树高度最高的放到最后边就能得到最优答案。
周末摸摸鱼~
下面直接开干!!!
代码
Python代码实现:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/3/12 12:51
# @Author : 府学路18号车神
# @Email :yurz_control@163.com
# @File : Day18.py
import sys
sys.setrecursionlimit(100000)
g = [[] for i in range(10**5+10)]
def dfs(u):
res = 0
cnt = len(g[u])
for x in range(0, len(g[u])):
res = max(res, dfs(g[u][x])+cnt)
return res
n = int(input())
for y in range(2, n+1):
temp = int(input())
g[temp].append(y)
res = dfs(1)
print(res)
由此,我们可以快速得出结果,验证完毕!
今天开刷第 十八 天,欢迎大家加入,一起变强,一起自律,一起上国赛!!!
有不同解法的可以在下面留言哦!~
往期刷题路线:
刷题路线 | Detail |
---|---|
2020年 | |
Day-01 | 门牌制作 |
Day-02 | 寻找2020 |
Day-03 | 跑步锻炼 |
Day-04 | 蛇形填数 |
Day-05 | 排序 |
Day-06 | 装饰珠 |
Day-07 | 成绩统计 |
Day-08 | 单词分析 |
Day-09 | 数字三角形 |
Day-10 | 平面切分 |
– | – |
2021年 | |
Day-11 | 卡片 |
Day-12 | 直线 |
Day-13 | 货物摆放 |
Day-14 | 路径 |
Day-15 | 回路计数 |
Day-16 | 时间显示 |
Day-17 | 杨辉三角 |
官方刷题练习系统:http://lx.lanqiao.cn/
❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!冲击国赛
⚡To Be No.1⚡⚡哈哈哈哈
⚡创作不易⚡,过路能❤关注、收藏、点个赞❤三连就最好不过了
ღ( ´・ᴗ・` )
❤
- 点赞
- 收藏
- 关注作者
评论(0)