C 언어로 N 진 트리를 깔끔하게 구현할 수 있습니까?C 언어의 N 진 트리
struct task {
char command[MAX_LENGTH];
int required_time;
};
:
Particulary, 나는 각 노드는 예를 들어 다음과 같이 이미 정의 된 구조체를 보유하고있는 각 노드에있는 아이들의 언 바운드 수,과 n 차 나무가 아닌 자기 ballancing을 구현하려는
C 언어로 N 진 트리를 깔끔하게 구현할 수 있습니까?C 언어의 N 진 트리
struct task {
char command[MAX_LENGTH];
int required_time;
};
:
Particulary, 나는 각 노드는 예를 들어 다음과 같이 이미 정의 된 구조체를 보유하고있는 각 노드에있는 아이들의 언 바운드 수,과 n 차 나무가 아닌 자기 ballancing을 구현하려는
첫 번째 패스, 당신은 단순히 구조체을 만들 수있는 작업뿐만 아니라 의 TreeNode의 포인터의 집합을 보유 (의이 TreeNode를를 부르 자). 이 집합은 배열 (N이 고정 인 경우) 또는 연결된 목록 (N이 가변적 인 경우) 중 하나 일 수 있습니다. 링크 된 목록에 추가 구조체를 선언 할 필요 실제 아이 (트리의 일부)에 TreeNode를 포인터 및 목록의 다음 ListNode에 대한 포인터 (의이 ListNode 그것이라고하자) (목록 끝에있는 경우 null).
그것은 다음과 같이 보일 수 있습니다
모든 n 차 트리 이진 트리로 표현 될 수있다struct task {
char command[MAX_LENGTH];
int required_time;
};
struct TreeNode;
struct ListNode {
struct TreeNode * child;
struct ListNode * next;
};
struct TreeNode {
struct task myTask;
struct ListNode myChildList;
};
경우 각 노드에서 다음의 첫 번째 자식 왼쪽 포인터 지점 오른쪽 포인터 포인트 동료.
R R /| \ | B C D B -- C -- D /\ | | | E F G E -- F G그래서, 당신의 경우는 다음과 같습니다
struct task {
char command[MAX_LENGTH];
int required_time;
};
struct node {
struct task taskinfo;
struct node *firstchild;
struct node *nextsibling;
};
이 기술은 많은 알고리즘들이 이진 트리보다는 더 복잡한 데이터 구조에 표현 될 수있는 쓸 간단 장점이있다 .
N-ary는 팬 아웃 정도 N 인 트리를 의미합니까? 너는 더 많은 것을, 예를 들면 자기 균형을 잡는 수색 나무, trie, B 나무, 등등 지정해야한다. – ephemient
맞다, 나는 몇몇 세부 사항을 추가하기 위하여 질문을 편집 할 것이다. 감사! 그리고 Matt J에게도 감사드립니다! – mmutilva