poj电话号码 简单的树

该博客讨论如何判断一组电话号码是否一致,即是否存在电话号码是其他号码的前缀。通过建立树形结构,遍历每个号码并更新节点状态来确定是否一致。如果在遍历过程中遇到某个节点是之前号码的前缀,则标记为不一致。给出的代码实现虽然有些冗余,但能正确解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如:

Emergency 911
Alice 97 625 999
Bob 91 12 54 26

在这个例子中,我们不可能拨通Bob的电话,因为Emergency的电话是它的前缀,当拨打Bob的电话时会先接通Emergency,所以这些电话号码不是一致的。

输入

第一行是一个整数t,1 ≤ t ≤ 40,表示测试数据的数目。
每个测试样例的第一行是一个整数n,1 ≤ n ≤ 10000,其后n行每行是一个不超过10位的电话号码。

输出

对于每个测试数据,如果是一致的输出“YES”,如果不是输出“NO”。

样例输入

2
3
911
97625999
91125426
5
113
12340
123440
12345
98346

样例输出

NO
YES

基本思路:每个节点包括10个儿子指针,每次输入一个号码,从根节点(0处,不代表任何值)开始,找他下一个数值对应的儿子:

如果儿子节点是NULL说明暂时不是任何人的前缀,这个节点的allin标记为false,走到最后一个值,将最后一个节点记为危险节点(如果后续的号码走到这就说明他是人家的前缀);

如果这个儿子节点不是NULL说明之前走过(之前输入的号码),接着走,如果到死都不是NULL,说明是前缀,如果走到一个危险节点,说明之前的某个号码是他的前缀。

代码冗余了一点,发现val位其实是没有作用的,然后也没啥必要用tree[100000],但是我懒得改了(明确)

一遍AC(我未来的老婆就叫一遍AC!)真是太棒了

#include<iostream>
#include<string.h>
#pragma warning (disable:4996)
using namespace std;
struct node
{
	node *so
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值