ZUFEOJ
Home
ProblemSet
Source/Category
Contest
Status
Ranklist
F.A.Qs
Login
Register
4254: BST断裂
内存限制:256 MB
时间限制:2 S
题面:传统
评测方式:文本比较
上传者:
提交:4
通过:4
提交
提交记录
统计
Web Board
题目描述
设T是任意二叉树,它的每个顶点都不超过两个子树。
给定的树是根的,所以只有一个顶点没有父节点,它是树的根。每个顶点上都写有一个整数。
对树T中的每个值运行以下算法:
1.设置指向树根的指针。
2.如果当前顶点中的值等于要查找的数字,则返回成功。
3.如果当前顶点中的值大于要查找的数字,则转到顶点的左侧子级。
4.如果当前顶点中的值小于要查找的数字,则转到顶点的右子级。
5.如果尝试转到不存在的顶点,则返回失败。
以下是所述算法的伪代码:
bool find(TreeNode t, int x) {
if (t == null)
return false;
if (t.value == x)
return true;
if (x < t.value)
return find(t.left, x);
else
return find(t.right, x);
}
find(root, x);
如果树是二进制搜索树(即,对于每个节点,左子树的值小于节点中的值,右子树的值大于节点中的数值),则所描述的算法正确工作。
但如果树不是二进制搜索树,它可能返回无效结果。
由于给定的树不一定是二进制搜索树,因此并非所有的数字都可以通过这种方式找到。
您的任务是计算在树中的每个值上运行搜索失败的次数。
如果树有多个顶点,这些顶点上的值相同,那么应该分别对每个顶点运行算法。
输入格式
第一行包含整数n(1 ≤ n ≤ 10
5
)-树中的顶点数。
接下来的n行中的每一行包含3个数字v、l、r(0 ≤ v ≤ 10
9
)-当前顶点上的值、顶点的左子级的索引和顶点的右子级的指数。
如果某个孩子不存在,则编号为-1。
请注意,树的不同顶点可能包含相同的值。
输出格式
打印搜索算法失败的次数。
输入样例
复制
3 15 -1 -1 10 1 3 5 -1 -1
输出样例
复制
2
数据范围与提示
样例输入
8
6 2 3
3 4 5
12 6 7
1 -1 8
4 -1 -1
5 -1 -1
14 -1 -1
2 -1 -1
样例输出
1
提示
在本例1中,树的根位于顶点2。搜索数字5和15将返回失败,因为在第一步算法将选择不包含您要查找的数字的子树。
分类标签
cf797D
2100
data
structures
dfs
and
similar