在两棵二元树中计数相等的节点
Count equal nodes in two binary trees
我已经解决了下一个问题,我无法解决:/
有两棵二进制树,对称地排列了一棵树 英语课程和另一棵法语课程。每棵树都有 以下数据:身份证明和学生的名字,每棵树 包含参加这些课程的学生。学生可以存在 在注册的两棵树中。要求制作一个函数 返回参加这两个课程的学生人数(这是 是,它们出现在两棵树中(
我该如何解决?
我使用两棵树的搜索功能制作了下一个代码
typedef struct Alumno
{
int matricula;
char nombre[30];
}Alumno;
typedef struct NodoA* PuntA;
typedef struct NodoA
{
Alumno TAlumno;
PuntA izq;
PuntA der;
}NodoA;
int buscar(PuntA & aluI, PuntA & aluF)
{
Alumno datoI, datoF;
PuntA r=raizI;
int cont = 0;
while((r!=NULL) && (r->datoI.matricula != aluF->datoF.matricula))
{
if(r->datoI.matricula < aluF->datoF.matricula)
r=r->izq;
else
r=r->der;
}
if(r!=NULL)
cont++;
}
对不起代码的语言。
ps:我不需要合并两棵二进制树,我需要计算两棵树之间的平等节点。
edit1:我做了此代码重新考虑练习:
int buscar(PuntA raizFrances, int nro)
{
PuntA r=raizFrances;
while(r!=NULL && r->dato!=nro)
{
if(nro<r->dato)
r=r->izq;
else
r=r->der;
}
if(r==NULL)
return 0;
else
return 1;
}
void contarDobles(PuntA raizI) //MUESTRA PIMERO LA RAIZ Y DESPUES IZQUIERDA Y DESPUES DERECHA
{
int contador = 0;
int buscaEnF = 0;
if(raizI!=NULL)
{
listarPre(raizI->izq); //1
buscaEnF = buscar(raizI->dato, raizI->dato.matricula);
if(buscaEnF == 1)
contador++;
listarPre(raizI->der); //2
}
cout<<"El total de alumnos inscriptos en ambas materias es: "<<contador<<endl;
}
解决此问题的通用算法是:
- 从Tree-1中选择一个元素,然后在Tree-2中搜索。
- 维护所有平等元素的计数器。
但是这个问题有两个方面:
情况1:树不是二进制搜索树
- 时间复杂性:O(m*n(
- 空间复杂性:O(1(
案例2:树是二进制搜索树
- 时间复杂性:O(M*log(n((
- 空间复杂性:O(1(
一个更好的解决方案是如下(W.R.T时间(:
- 遍历较小的树,说树-1并将其元素存储在地图中。
- 穿越较大的树并搜索地图中存在的元素
-
相应地增加计数器。
-
时间复杂性:O(M N(
- 空间复杂性:O(min(m,n((
其中,m和n分别是树-1和树-2的大小。
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 为什么我的删除节点函数实际上没有删除节点?
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 节点 *temp; 和节点 *tmp = 新节点之间的差异
- 引擎节点:未定义的符号:_ZTV6Config
- 为什么"delete"关键字不删除节点?
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 如何按数字顺序插入链表节点?
- 在两棵二元树中计数相等的节点
- 结合二元算子AST节点的Boost Spirit Qi语法