이진 트리
-
NULL 링크에 중위 후속자 (inorder successor)를 저장시켜 놓은 이진 트리입니다. 중위 후속자란 중위 순회의 순서에서 그 다음에 이어질 차례의 노드입니다. 중위 후속자로 인해 순환 호출 없이도 중위 순회가 간편하다는 장점이 있습니다. 스레드 이진 트리 구조체 typedef struct TreeNode { int data; struct TreeNode *left, *right; int is_thread; //만약 오른쪽 링크가 스레드이면 TRUE } TreeNode; 중위 후속자를 찾는 함수 TreeNode *find_successor(TreeNode *p) { // q는 p의 오른쪽 포인터 TreeNode *q = p->right; // 만약 오른쪽 포인터가 NULL이거나 스레드이면 오른..
[자료구조] 스레드 이진 트리(threaded binary tree)NULL 링크에 중위 후속자 (inorder successor)를 저장시켜 놓은 이진 트리입니다. 중위 후속자란 중위 순회의 순서에서 그 다음에 이어질 차례의 노드입니다. 중위 후속자로 인해 순환 호출 없이도 중위 순회가 간편하다는 장점이 있습니다. 스레드 이진 트리 구조체 typedef struct TreeNode { int data; struct TreeNode *left, *right; int is_thread; //만약 오른쪽 링크가 스레드이면 TRUE } TreeNode; 중위 후속자를 찾는 함수 TreeNode *find_successor(TreeNode *p) { // q는 p의 오른쪽 포인터 TreeNode *q = p->right; // 만약 오른쪽 포인터가 NULL이거나 스레드이면 오른..
2021.05.22 -
이진트리의 레벨 순회 레벨 순회는 각 노드를 레벨 순으로 검사하는 순회 방법입니다. 중위, 후위, 전위 순회가 스택을 사용했던 것에 비해 레벨 순회는 선입선출 기반의 큐를 사용하는 순회 법입니다. 위의 이진트리를 레벨 순회해보겠습니다. "만나는 노드를 꺼내서 출력하고 서브트리를 왼쪽부터 큐에 넣는다" 만 기억하면 됩니다. 먼저 루트를 방문하여 +를 큐에 넣습니다. 큐 : | + | +를 꺼내서 출력하고 서브트리인 *와 /를 큐에 넣습니다. 큐 : | * | / | *를 꺼내서 출력하고 서브트리인 A와 B를 큐에 넣습니다. 큐 : | / | A | B | /를 꺼내서 출력하고 서브트리인 C와 D를 큐에 넣습니다. 큐 : | A | B | C | D | A를 꺼내서 출력하고 큐에 넣을 서브트리는 없습니다. ..
[자료구조] 이진 트리의 순회 - 레벨 순회이진트리의 레벨 순회 레벨 순회는 각 노드를 레벨 순으로 검사하는 순회 방법입니다. 중위, 후위, 전위 순회가 스택을 사용했던 것에 비해 레벨 순회는 선입선출 기반의 큐를 사용하는 순회 법입니다. 위의 이진트리를 레벨 순회해보겠습니다. "만나는 노드를 꺼내서 출력하고 서브트리를 왼쪽부터 큐에 넣는다" 만 기억하면 됩니다. 먼저 루트를 방문하여 +를 큐에 넣습니다. 큐 : | + | +를 꺼내서 출력하고 서브트리인 *와 /를 큐에 넣습니다. 큐 : | * | / | *를 꺼내서 출력하고 서브트리인 A와 B를 큐에 넣습니다. 큐 : | / | A | B | /를 꺼내서 출력하고 서브트리인 C와 D를 큐에 넣습니다. 큐 : | A | B | C | D | A를 꺼내서 출력하고 큐에 넣을 서브트리는 없습니다. ..
2021.05.15 -
이진 트리의 구현, 표현 방법에는 배열을 이용한 방법과 연결리스트를 이용한 방법이 있습니다. 배열을 이용한 이진 트리의 구현 배열을 이용한 방법은 모든 이진 트리를 포화 이진 트리라고 가정하고 각 노드에 번호를 붙여서 그 번호를 배열의 인덱스로 삼아 노드의 데이터를 배열에 저장하는 방법입니다. 어떤 노드를 n이라고 할 때, n의 부모 노드의 인덱스(index)는 n/2 n의 왼쪽 자식 노드의 인덱스는 2n n의 오른쪽 자식 노드의 인덱스는 2n + 1 입니다. 위 그림에서 c노드의 배열 인덱스를 찾기 위해서는 i의 인덱스를 1이라고 할 때, 순차적으로 계산하면 됩니다. f의 인덱스 == (1 * 2), a의 인덱스 == (2 * 2), b의 인덱스 == (4 * 2 + 1), e의 인덱스 == (9 * ..
[자료구조] 이진 트리의 구현이진 트리의 구현, 표현 방법에는 배열을 이용한 방법과 연결리스트를 이용한 방법이 있습니다. 배열을 이용한 이진 트리의 구현 배열을 이용한 방법은 모든 이진 트리를 포화 이진 트리라고 가정하고 각 노드에 번호를 붙여서 그 번호를 배열의 인덱스로 삼아 노드의 데이터를 배열에 저장하는 방법입니다. 어떤 노드를 n이라고 할 때, n의 부모 노드의 인덱스(index)는 n/2 n의 왼쪽 자식 노드의 인덱스는 2n n의 오른쪽 자식 노드의 인덱스는 2n + 1 입니다. 위 그림에서 c노드의 배열 인덱스를 찾기 위해서는 i의 인덱스를 1이라고 할 때, 순차적으로 계산하면 됩니다. f의 인덱스 == (1 * 2), a의 인덱스 == (2 * 2), b의 인덱스 == (4 * 2 + 1), e의 인덱스 == (9 * ..
2021.05.10