이진 트리에서 각 노드는 두 개의 자식, 즉 왼쪽 자식과 오른쪽 자식을 포함합니다. 두 개의 이진 트리가 있고 작업이 트리 중 하나를 왼쪽으로 뒤집어 다른 트리를 대칭 이동하여 얻을 수 있는지 확인하는 작업이라고 가정해 보겠습니다.
다른 나무를 왼쪽으로 뒤집어 얻을 수 있는 경우 나무는 동형입니다.
예를 들어
입력-1
<강한>
출력: 동형
설명: 주어진 Tree-2는 Tree-1을 왼쪽으로 뒤집어서 얻을 수 있으므로 Tree는 동형입니다.
이 문제를 해결하기 위한 접근 방식
이 특정 문제를 해결하기 위한 재귀적 접근 방식은 부울 함수가 두 트리의 루트 노드를 확인하는 것입니다. 두 트리의 루트가 비어 있거나 NULL이면 True를 반환하고 두 루트에 동일한 데이터가 있는지 재귀적으로 확인합니다. 그런 다음 트리의 왼쪽 및 오른쪽 노드를 재귀적으로 확인합니다.
- 두 개의 이진 트리에 대한 노드를 생성합니다.
- 부울 함수 isIsomorphicTree(node*r1, node*r2)는 두 트리의 루트를 취하고 트리가 동형인지 여부를 반환합니다.
- 처음에 트리가 비어 있거나 노드가 없으면 True를 반환합니다.
- 루트된 하위 트리가 뒤집히지 않고 둘 다 뒤집힌 경우 True를 반환합니다.
예
#include<bits/stdc++.h> using namespace std; struct treenode { int data; treenode * left; treenode * right; }; struct treenode * createNode(int d) { struct treenode * root = new treenode; root -> data = d; root -> left = NULL; root -> right = NULL; return root; } bool isIsomorphicTree(treenode * r1, treenode * r2) { if (r1 == NULL and r2 == NULL) { return true; } if (r1 == NULL or r2 == NULL) { return false; } return (r1 -> data == r2 -> data && ((isIsomorphicTree(r1 -> left, r2 -> right) && isIsomorphicTree(r1 -> right, r2 -> left)) || (isIsomorphicTree(r1 -> left, r2 -> left) && isIsomorphicTree(r1 -> right, r2 -> right)))); } int main() { struct treenode * r1 = createNode(1); r1 -> left = createNode(2); r1 -> right = createNode(3); r1 -> left -> left = createNode(4); r1 -> left -> right = createNode(5); r1 -> right -> left = createNode(6); r1 -> left -> right -> left = createNode(7); r1 -> left -> right -> right = createNode(8); struct treenode * r2 = createNode(1); r2 -> left = createNode(3); r2 -> right = createNode(2); r2 -> right -> left = createNode(4); r2 -> right -> right = createNode(5); r2 -> left -> right = createNode(6); r2 -> right -> right -> left = createNode(8); r2 -> right -> right -> right = createNode(7); if (isIsomorphicTree(r1, r2)) { cout << "Isomorphic" << endl; } else { cout << "Not an Isomorphic" << endl; } return 0; }
위의 코드를 실행하면 출력이 다음과 같이 생성됩니다.
출력
Isomorphic
설명: 주어진 나무는 왼쪽으로 다른 나무를 뒤집어서 얻을 수 있으므로 동형입니다.