이진 트리의 열거 주어진 크기(특정 노드 수)의 레이블이 지정되지 않은 고유한 이진 트리의 총 수를 계산합니다. 이 글에서는 n 노드의 바이너리 트리 수를 세는 프로그램을 만들 것입니다.
바이너리 트리 노드의 레이블링에 따라 두 가지 유형이 있습니다.
- 레이블이 있는 이진 트리
- 레이블 없는 이진 트리
레이블이 있는 이진 트리: 트리의 노드에 값으로 레이블이 지정된 이진 트리입니다.
주어진 노드 수에 대해 레이블이 지정된 이진 트리의 다른 유형:
노드 수 N =2
마찬가지로 N개의 노드에 대해 레이블이 지정된 고유한 이진 트리의 수를 찾을 수 있습니다.
N =1, 개수 =1
N =2, 개수 =4
N =3, 개수 =30
N =4, 개수 =336
여기에서 레이블이 지정된 노드 각각에 대해 레이블이 지정되지 않은 노드에 대해 이루어진 모든 유형의 배열이 수행되는 것을 볼 수 있습니다. 따라서 개수는 n이 됩니다! * 레이블이 지정되지 않은 이진 트리의 수입니다.
C(N) =n! * ( (2n!) / (n+1)! * n! ) )
주어진 수 N에 대해 레이블이 지정되지 않은 고유한 바이너리 트리의 수를 설명하는 프로그램,
예시
#include <iostream> using namespace std; int fact(int n){ if(n == 1) return 1; return n * fact(n - 1); } int distinctCountLabeledTree(int N){ return ( (fact(N))*( fact(2*N) / ( fact(N+1)*fact(N)) ) ) ; } int main(){ int N = 6; cout<<"The number of Distinct labeled Binary Tree is "<<distinctCountLabeledTree(N); return 0; }
출력 -
The number of Distinct labeled Binary Tree is 95040
레이블이 지정되지 않은 이진 트리: 트리의 노드에 값 레이블이 지정되지 않은 이진 트리입니다.
주어진 노드 수에 대해 레이블이 지정되지 않은 다른 유형의 바이너리 트리:
노드 수 N =2
레이블이 지정되지 않은 고유한 이진 트리의 수 =2
마찬가지로 N에 대해 레이블이 지정되지 않은 고유한 이진 트리의 수를 찾을 수 있습니다.
N =1, 개수 =1
N =2, 개수 =2
N =3, 개수 =5
N =4, 개수 =14
이것을 사용하여 N개의 노드에 대해 레이블이 지정되지 않은 고유한 이진 트리의 수를 공식화할 수 있습니다.
카탈루냐 숫자로 표시됩니다.
다른 공식은 다음과 같습니다.
C(N) =(2n!) / (n+1)! * 아니!
주어진 노드 수 N에 대해 레이블이 지정되지 않은 고유한 바이너리 트리의 수를 찾는 프로그램,
예시
#include <iostream> using namespace std; int fact(int n){ if(n == 1) return 1; return n * fact(n - 1); } int distinctCount(int N){ return ( fact(2*N) / ( fact(N+1)*fact(N) ) ); } int main(){ int N = 7; cout<<"The number of Distinct unlabeled Binary Tree is "<<distinctCount(N); return 0; }
출력 -
The number of Distinct unlabeled Binary Tree is 6