하나의 수조를 깊이가 가장 낮은 두 갈래 나무로 바꾸다
Givena sorted(increasing order) array, write an algorithm to create abinary tree with minimal height.
생각:
이 문제는 비교적 간단하다. 이미 정렬된 수조와 높이가 가장 낮은 두 갈래 나무라는 두 키워드에서 깨우침을 얻을 수 있다. 이분 찾기와 유사하게 가장 중간 요소를 뿌리 노드로 하고 왼쪽 요소를 왼쪽 나무에 삽입하고 오른쪽 요소를 오른쪽 나무에 꽂으면 된다. 마지막으로 두 갈래 찾기 나무를 실현했다.
코드는 다음과 같습니다.
#include <algorithm>
#include <stdio.h>
#include <time.h>
struct node
{
int data;
struct node * lchild;
struct node * rchild;
};
// ,
struct node* ConvertArrayToTree(int data[], int first, int last)
{
if (last < first)
{
return NULL;
}
else
{
int mid = ( last + first ) / 2;
struct node * newNode = NULL;
newNode = (struct node *)malloc(sizeof(struct node));
newNode->data = data[mid];
newNode->lchild = ConvertArrayToTree(data, first, mid - 1);
newNode->rchild = ConvertArrayToTree(data, mid + 1, last);
return newNode;
}
}
//
void Traverse(struct node *root)
{
if (root == NULL)
{
return;
}
Traverse(root->lchild);
printf("%d\t", root->data);
Traverse(root->rchild);
}
int main(int argc, char* argv[])
{
const int SIZE = 100;
int data[SIZE];
int i, j;
int flag = 1;
struct node *head = NULL;
srand(time(0));
for (i = 0; i < SIZE; i++)
{
data[i] = rand() % SIZE;
flag *= -1;
data[i] *= flag;
}
std::sort(data, data + SIZE);
for (i = 0; i < SIZE; i++)
{
printf("%d\t", data[i]);
}
printf("
");
head = ConvertArrayToTree(data, 0, SIZE - 1);
Traverse(head);
printf("
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 수조를 깊이가 가장 낮은 두 갈래 나무로 바꾸다문제 정의: Givena sorted(increasing order) array, write an algorithm to create abinary tree with minimal height. 생각: 이 문제는 비...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.