제5 장 학습 소결
이 진 트 리 를 배 우 는 과정 에서 나무의 조작 과정 에서 많은 반복 적 인 조작 은 재 귀 를 통 해 이 루어 져 야 한다. 저 는 재 귀 하 는 사상 에 대해 더욱 깊이 알 게 되 었 습 니 다.
우리 도 많은 이 진 트 리 의 성질 을 배 웠 다. 예 를 들 어:
이 진 트 리 의 성질:
1: 이 진 트 리 의 i 층 에는 많아야 2 ^ (i - 1) 개의 결점 이 있다.
2: 깊이 가 k 인 이 진 트 리 는 많아야 2 ^ k - 1 개의 결점 이 있 습 니 다.
완전 이 진 트 리 의 성질:
1: 결점 i 의 자 결점 은 2 * i 와 2 * i + 1 이다.
2: 결점 i 의 부 결점 은 i / 2
이 진 트 리 를 옮 겨 다 니 는 3 가지 방법 도 배 웠 다.
1: 뿌리 - > 왼쪽 트 리 - > 오른쪽 트 리
2: 가운데 순서: 왼쪽 하위 트 리 - > 뿌리 - > 오른쪽 하위 트 리
3: 뒤 순 옮 겨 다 니 기: 왼쪽 트 리 - > 오른쪽 트 리 - > 뿌리
이 진 트 리 의 저장 구 조 는 체인 구조 (링크 법 사용), 순서 구조 (배열 사용) 가 있 고 개인 적 으로 감각 순서 구 조 를 사용 하 는 것 이 더욱 편리 하 다.
호 프 만 트 리 의 구축 과 계산 도 배 웠 습 니 다.
(1) 각 노드 를 가중치 에 따라 작은 것 에서 큰 것 으로 정렬 한다.(2) 최소 가중치 의 두 노드 를 취하 고 부모 노드 를 이 두 노드 의 부모 로 새로 만 듭 니 다. 부모 노드 의 가중치 는 하위 노드 의 가중치 의 합 이 고 이 부모 노드 를 원래 의 대기 열 에 넣 습 니 다.(3) 대기 열 에 노드 가 하나 밖 에 없 을 때 까지 (2) 절 차 를 반복 합 니 다. 이 노드 는 루트 노드 입 니 다.
그룹 합작 에서 우리 팀 의 초기 코드 는 다음 과 같다.
#include
using namespace std;
typedef struct {//
int parent=-1;//
int k=0;//
}Node;
typedef struct {//
Node data[100001];
int root;//root
}*tree, Tree;
void creattree(tree& T, int n)//
{
int m, a, b[100001] = { 0 };
for (int i = 1; i <= n; i++)
{
cin >> m;
if (m == 0)//
T->data[i].k = 1;
else
for (int k = 0; k < m; k++)
{
cin >> a;
T->data[a].parent = i;
b[a]=1;
}
}
for (int i = 1; i <= n; i++)//
if (b[i] == 0)
{
T->root = i;
T->data[i].parent = -1;
break;
}
}
void searchleaf(tree T, int n)//
{
int k = 0, m = 0, M = 0;
for (int i = 1; i <= n; i++)
{
if (T->data[i].k == 1)//
{
int a = i;
while (T->data[a].parent != -1)//
{
k++;
a = T->data[a].parent;
}
if (k == n - 1)// k
{
M = i;
break;
}
else if (k > m)
{
M = i;
m = k;
}
}
k = 0;
}
cout << M;
}
int main()
{
tree T = new Tree;
int n;
cin >> n;
creattree(T, n);
if (n == 1)
cout << 1;
else
searchleaf(T, n);
}
다음 과 같은 문제 가 있 습 니 다.
1. 마지막 테스트 지점 에 시간 초과 가 발생
2. 알고리즘 은 잎 결점 에서 위로 뿌리 노드 를 찾 는 것 으로 깊이 가 있 고 시간 복잡 도가 너무 크다.
3. 방출 공간 없 음
알고리즘 에 문제 가 생 겨 서 전체 코드 가 통과 하지 못 했 습 니 다. 나중에 많은 개선 을 시 도 했 습 니 다. 예 를 들 어 하나의 배열 로 잎 결 점 을 기록 하고 마지막 테스트 점 을 넘 지 못 했 습 니 다.잎 결점 을 위로 향 해 뿌리 노드 를 찾 는 알고리즘 은 잎의 깊이 를 찾 는 데 있어 시간 복잡 도 는 O (n ^ 2) 이 고 층 차 는 O (n) 이다.
앞으로 팀 이 업 무 를 전개 하기 전에 이번 교훈 을 받 아들 여 방법의 시간 복잡 도 를 자세하게 토론 하고 이런 문제 가 발생 하지 않도록 해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.