이진 트리의 밀도는 크기를 높이로 나누어 계산합니다. 이진 트리 밀도 =크기/높이
먼저 데이터와 왼쪽 및 오른쪽 노드 자식을 포함하는 트리 노드를 나타내는 구조체를 정의하겠습니다. 이것이 생성될 첫 번째 노드이면 루트 노드이고 그렇지 않으면 자식 노드입니다.
struct Node {
int data;
struct Node *leftChild, *rightChild;
}; 다음으로 int 값을 취하여 노드의 데이터 멤버에 할당하는 createNode(int 데이터) 함수를 만듭니다. 함수는 생성된 구조체 노드에 대한 포인터를 반환합니다. 또한 새로 생성된 노드의 왼쪽과 오른쪽 자식은 null로 설정됩니다.
Node* createNode(int data){
Node* node = new Node;
node->data = data;
node->leftChild = node->rightChild = NULL;
return node;
} 우리의 treeDensity(Node *root) 함수는 루트 노드를 취하여 그 노드가 null인지 여부를 확인합니다. 그런 다음 크기 변수를 선언하고 0으로 설정합니다. heightAndSize(root, size) 함수의 반환 값은 높이 변수에 할당됩니다. 그러면 높이와 크기 사이에서 수행된 부동 소수점 나누기가 반환됩니다.
float treeDensity(Node* root){
if (root == NULL)
return 0;
int size = 0;
int height = heightAndSize(root, size);
return (float)size/height;
} 다음으로 heightAndSize(Node* node, int &size)는 루트 노드와 크기 변수에 대한 참조를 취합니다. 루트 노드가 null이면 0이 반환됩니다. 각 하위 트리의 높이는 재귀적으로 계산되며 각 재귀에서 크기가 증가합니다. 그런 다음 왼쪽 또는 오른쪽 하위 트리 중 더 큰 값을 반환합니다.
int heightAndSize(Node* node, int &size){
if (node==NULL)
return 0;
int left = heightAndSize(node->leftChild, size);
int right = heightAndSize(node->rightChild, size);
size++;
return (left > right) ? ++left : ++right;
} 예시
한 번의 순회에서 이진 트리 밀도를 찾는 다음 구현을 살펴보겠습니다. -
#include<iostream>
using namespace std;
struct Node{
int data;
Node *leftChild, *rightChild;
};
Node* createNode(int data){
Node* node = new Node;
node->data = data;
node->leftChild = node->rightChild = NULL;
return node;
}
int heightAndSize(Node* node, int &size){
if (node==NULL)
return 0;
int left = heightAndSize(node->leftChild, size);
int right = heightAndSize(node->rightChild, size);
size++;
return (left > right) ? ++left : ++right;
}
float treeDensity(Node* root){
if (root == NULL)
return 0;
int size = 0;
int height = heightAndSize(root, size);
return (float)size/height;
}
int main(){
Node* root = createNode(7);
root->leftChild = createNode(9);
root->rightChild = createNode(11);
cout<< "The density of the above given binary tree is "<<treeDensity(root);
return 0;
} 출력
위의 코드는 다음 출력을 생성합니다 -
The density of the above given binary tree is 1.5