Heap은 특별한 형태의 tree 구조이다.
많은 예제를 찾아볼 수 있는 texample.net에서는 tikz를 이용하여 tree 구조를 그리는 법도 소개하고 있다.
http://www.texample.net/tikz/examples/merge-sort-recursion-tree/
거의 비슷한 예제로 다음과 같은 것도 있다.
http://forcecore.tistory.com/1019
Heap을 그릴 때마다 이렇게 일일이 입력하는 것은 귀찮으므로 프로그램을 만들었다. 이 프로그램을 LaTeX이나 TeX 명령으로 구현하는 것은 본인의 능력을 벗어나고, perl 등의 스크립트 언어에도 별로 익숙하지 않기 때문에 그냥 C로 만들었다. 컴파일하는 것이 귀찮긴 하지만 할 수 없다.
입력은 heap을 array로 구현했을 때의 순서대로 한 줄에 하나씩 넣어주면 되고, 조금씩 수정해서 쓰면 된다.
다음은 노가다의 산물. 위에서 만든 c 코드는 기본적인 것만 되고, 노드를 지우거나 오른쪽에 더 쓰는 건 노가다로 한 것이다.
많은 예제를 찾아볼 수 있는 texample.net에서는 tikz를 이용하여 tree 구조를 그리는 법도 소개하고 있다.
http://www.texample.net/tikz/examples/merge-sort-recursion-tree/
거의 비슷한 예제로 다음과 같은 것도 있다.
http://forcecore.tistory.com/1019
Heap을 그릴 때마다 이렇게 일일이 입력하는 것은 귀찮으므로 프로그램을 만들었다. 이 프로그램을 LaTeX이나 TeX 명령으로 구현하는 것은 본인의 능력을 벗어나고, perl 등의 스크립트 언어에도 별로 익숙하지 않기 때문에 그냥 C로 만들었다. 컴파일하는 것이 귀찮긴 하지만 할 수 없다.
#include <stdio.h>G
#include <string.h>
#define MAX_NODE 100
#define MAX_NAME 5
char buffer[MAX_NODE][MAX_NAME];
void print_child(char buffer[][MAX_NAME], int number, int pos)
{
if (pos >= number)
return;
printf("node ");
printf("(%d) {%s}\n", pos+1, buffer[pos]);
if (pos*2 + 1 < number) {
printf("child {");
print_child(buffer, number, pos*2 + 1);
printf("}\n");
if (pos*2 + 2 < number) {
printf("child {");
print_child(buffer, number, pos*2 + 2);
printf("}\n");
} else {
printf("child [missing]");
}
}
}
int main(int argc, char* argv[])
{
int i;
for (i=0; i<MAX_NODE; ++i) {
char *c = fgets(buffer[i], MAX_NAME, stdin);
if (!c)
break;
int len = strlen(buffer[i]);
if (buffer[i][len-1] == '\n')
buffer[i][len-1] = '\0';
}
if (i < 1)
return 1;
printf("\\begin{tikzpicture}[\n"
"level distance=12mm,\n"
"level/.style={sibling distance=32mm/#1},\n"
"level 3/.style={sibling distance=32mm/4},\n"
"every node/.style={circle,draw,"
"font=\\fontsize{9}{9}\\selectfont,minimum size=21pt}]\n"
"\\");
print_child(buffer, i, 0);
printf(";\n\\end{tikzpicture}");
return 0;
}
입력은 heap을 array로 구현했을 때의 순서대로 한 줄에 하나씩 넣어주면 되고, 조금씩 수정해서 쓰면 된다.
다음은 노가다의 산물. 위에서 만든 c 코드는 기본적인 것만 되고, 노드를 지우거나 오른쪽에 더 쓰는 건 노가다로 한 것이다.