Estou tendo dificuldades para descrever isso em termos corretos, por isso darei o máximo de detalhes possível e espero que alguém saiba o que estou tentando fazer = -)
Estou tentando comparar duas árvores de nós para determinar quão semelhantes / diferentes elas são em termos de estrutura. Nos meus diagramas abaixo, os dois exemplos têm o mesmo número de filhos, netos etc. No exemplo 1, o Root tem um filho com dois filhos, mas no exemplo dois, o Root não.
Provavelmente, eu poderia descobrir como fazer um loop recursivo e contar quantos de cada nível existem e compará-los, dando-me uma idéia de como as árvores são semelhantes, mas apenas fazendo dessa maneira, parecerá que são idênticas, mas na verdade eles não são.
Alguém sabe disso? Ou mesmo qual é o termo técnico para o que é isso?
Edit: Além disso, isso está em c # e eu estou usando listas para armazenar esses objetos e seus filhos.
Exemplo 1
Exemplo 2
fonte
Respostas:
O que você está procurando é isomorfismo de árvore enraizada, que é uma versão especializada do isomorfismo de gráfico , exceto para árvores e o nó raiz é fixo.
A explicação dada nesta tarefa usa duas propriedades:
Usando essas duas propriedades, suba das folhas até a raiz, rotulando cada nó com o número de filhos, em ordem lexicográfica. Por exemplo, sua Raiz no Exemplo 1 será rotulada (0, 0, (0, 1)) - ela possui três filhos, o primeiro / segundo possui 0 filhos e o terceiro possui 2 filhos com 0 e 1 filhos, respectivamente. Finalmente, basta comparar os rótulos das raízes para ver se as árvores são iguais.
Não fiz esse tipo de assunto e só li este artigo alguns minutos atrás, por isso não posso garantir sua correção; espero que ajude de qualquer maneira.
fonte
O problema para ver se dois gráficos são logicamente iguais é chamado Isomorfismo de Gráfico; portanto, você pode querer começar a partir daí.
Observe que o problema geral de isomorfismo de gráfico está em NP; no entanto, para este caso especial, pode haver um atalho, não tenho certeza, pois parece lógico que para conhecer as diferenças que você precisa verificar se são iguais.
fonte