【发布时间】:2021-08-24 22:17:12
【问题描述】:
我正在用 C 语言编写一个程序,旨在识别两个二叉树是否是镜像的。在我的程序中,我设法创建了两棵树,其结构如下图所示:
我的问题是我不知道如何创建一个递归方法来验证两棵二叉树是否镜像,一棵相对于另一棵;我试图创建方法,但我只能比较两个二叉树的根,我无法超越开始。
附上我目前的代码。
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
//Define the structure for the two binary trees
typedef struct{
int dato;
struct nodo *izq;
struct nodo *der;
}nodo;
typedef struct{
int dato;
struct nodo *izq;
struct nodo *der;
}nodo1;
//Define auxiliary pointers
nodo *raiz = NULL;/
nodo1 *raiz1 = NULL;//
//Function to add nodes
void insertarNodo(int datoI){
nodo *nuevo = malloc(sizeof(nodo));
nuevo->dato = datoI;
nuevo->izq = NULL;
nuevo->der = NULL;
if(raiz == NULL)
raiz = nuevo;
else{
nodo *anterior, *recorrer;
anterior = NULL;
recorrer = raiz;
while(recorrer != NULL){
anterior = recorrer;
if(datoI < recorrer->dato)
recorrer = recorrer->izq;
else
recorrer = recorrer->der;
}
if(datoI < anterior->dato)
anterior->izq = nuevo;
else
anterior->der = nuevo;
}
}
//Function to add nodes
void insertarNodo1(datoI){
nodo1 *nuevo = malloc(sizeof(nodo1));
nuevo->dato = datoI;
nuevo->izq = NULL;
nuevo->der = NULL;
if(raiz1 == NULL)
raiz1 = nuevo;
else{
nodo1 *anterior, *recorrer;
anterior = NULL;
recorrer = raiz1;
while(recorrer != NULL){
anterior = recorrer;
if(datoI > recorrer->dato)
recorrer = recorrer->izq;
else
recorrer = recorrer->der;
}
if(datoI > anterior->dato)
anterior->izq = nuevo;
else
anterior->der = nuevo;
}
}
void mostrarArbol1(nodo *arbol, int contador){
int i = 0;
if(arbol == NULL){
return;
}else{
mostrarArbol1(arbol->der,contador+1);
for(i=0; i<contador;i++)
printf(" ");
printf("(%d)\n",arbol->dato);
mostrarArbol1(arbol->izq,contador+1);
}
}
void mostrarArbol2(nodo1 *arbol, int contador){
int i = 0;
if(arbol == NULL){
return;
}else{
mostrarArbol2(arbol->der,contador+1);
for(i=0; i<contador;i++)
printf(" ");
printf("(%d)\n",arbol->dato);
mostrarArbol2(arbol->izq,contador+1);
}
}
//Recursive method I need help with
void isMirror(nodo* p,nodo1* q) {
if(p->dato == q->dato){
printf("Mirrors");
}
else{
printf("Not mirrors");
}
isMirror(p->der, q->izq);
}
int main(){
insertarNodo(20);
insertarNodo(8);
insertarNodo(22);
insertarNodo(25);
insertarNodo(12);
insertarNodo(14);
insertarNodo(10);
insertarNodo(14);
insertarNodo1(20);
insertarNodo1(8);
insertarNodo1(22);
insertarNodo1(25);
insertarNodo1(12);
insertarNodo1(4);
insertarNodo1(10);
insertarNodo1(14);
mostrarArbol1(raiz, 0);
printf("\n\n--------------------------\n\n");
mostrarArbol2(raiz1, 0);
printf("\n\n--------------------------\n\n");
isMirror(raiz, raiz1);
return 0;
}
你能帮帮我吗?
非常感谢您。
【问题讨论】:
-
我首先编写一个函数来递归地遍历一棵树,然后扩展该函数以同时遍历两棵树。
-
嗨,Sasori,欢迎来到该网站。你在你的问题中表现出你的努力,这真的很好!但你知道吗,这是一个英文网站。如果标识符是英文,您的问题/代码会受到更多关注。
-
我的意思是,英文 cmets 使它相当容易理解;谢谢。
标签: c struct binary-tree function-definition