ZUFEOJ
Home
ProblemSet
Source/Category
Contest
Status
Ranklist
F.A.Qs
Login
Register
9777: AVL树
内存限制:1024 MB
时间限制:1 S
题面:传统
评测方式:文本比较
上传者:
提交:1
通过:1
提交
提交记录
统计
Web Board
题目描述
米浴是一名来自特雷森学院的赛马娘,她正在上数据结构课! 在数据结构课中,她学习了 AVL 树。AVL 树是一种基于树高的二叉搜索树,二叉树 T 的树高是这么定 义的:
• 如果 T 是空的,那么 h
T
= 0;
• 否则,假设 T 的根为 u,l
su
和 r
su
分别表示 u 的左子树和右子树(都有可能是空的)。此 时,h
T
= max(h
lsu
, h
rsu
) + 1。
称一颗有根二叉树 T 为AVL树,当且仅当:
• T 是空的,或者
• 假设 T 的根为 u,u 的左子树和右子树(都有可能是空的)l
su
和 r
su
均为 AVL 树,且 |h
lsu
− h
rsu
| ≤ 1。
现在,米浴有一颗根为 1 的二叉树,但是这棵树可能不是 AVL 树。为了把这棵树变成一颗 AVL 树,她 可以进行任意多次如下的操作,每次操作在以下三种方式中选择一个:
• 删除一个叶子。
• 选择一个左子节点为空的节点,并创建一个新顶点作为它的左子节点。
• 选择一个右子节点为空的节点,并创建一个新顶点作为它的右子节点。
她想知道,最少几次操作可以让这棵树变成 AVL 树。
输入格式
本题有多组数据
。
第一行一个正整数
T
(
1
≤
T
≤
10000
)
表示数据组数
。
对于每组数据
,
第一行一个整数
n
(
1
≤
n
≤
2e5
)
,
表示当前的树的节点数
。
接下来
n
行
,
第
i
行两个整数
l
si
,
r
si
(
0
≤
l
si
,
r
si
≤
n
)
,
表示
i
的左儿子和右儿子
,
如果左儿子或者右
儿子不存在
,
那么用
0
表示
。
保证给定的树是一颗以
1
为根的二叉树
,
保证
Pn
≤
2e5
。
输出格式
对于每组数据,输出一行一个整数,表示最少几次操作可以让这棵树变成AVL 树。
输入样例
复制
3 3 0 2 3 0 0 0 4 0 2 3 4 0 0 0 0 5 0 2 3 0 4 0 0 5 0 0
输出样例
复制
1 1 3
分类标签
2025暑期牛客赛9