반응형
SMALL

04. 이진 트리의 구현

배열을 이용한 이진 트리의 구현

- 트리가 완전 이진 트리 또는 포화 이진 트리인 경우 낭비되는 공간이 없어 효율적임

- 트리가 깊어질수록 기억장소 낭비가 2의 거듭제곱에 비례하여 낭비가 심해짐

포인터를 이용한 이진 트리의 구현

- 포인터를 이용한 이진 트리의 노드 생성

struct node{
	struct node* left;
	struct node* right;
	int info;
}

연결 리스트로 구현

 

 

 

 

05. 이진 트리 연산

이진 트리의 순회

- 이진 트리의 각 노드를 ( 빠짐없이 그리고 중복없이) 한 번씩 방문하는 것

 

이진 트리의 전위 순회

루트노드- 왼쪽 자식노드 - 오른쪽 자식노드

이진 트리의 후위 순회

왼쪽 자식노드 - 오른쪽 자식 노드 루트 노드

이진트리의 중위 순회

왼쪽 자식 노드 - 루트노드 - 오른쪽 자식 노드

 

이진 트리의 순회 알고리즘

- 전위 순회(PLR)

struct node *nodeptr ;
void preorder(struct node *tree_ptr){
  if(tree_ptr){
	printf("%d",tree_ptr->info);
	preorder(tree_ptr->left);
	preorder(tree_ptr->right);	}	}

- 중위 순회(LPR)

struct node* nodeptr ;
void inorder(struct node *tree_ptr){
  if(tree_ptr){
	inorder(tree_ptr->left);
	printf("%d",tree_ptr->info);
	inorder(tree_ptr->right);   }	}

- 후위 순회(LRP)

 

struct node *nodeptr ;
void postorder(structnode*tree_ptr){
  if(tree_ptr){
	postorder(tree_ptr->left);
	postorder(tree_ptr->right);
	printf("%d",tree_ptr->info);	}	}

 

이진 트리의 생성/삽입/삭제

- 일반적인 이진 트리를 생성하는 것은 (이중) 연결 리스트 연산을 사용함

- 첫 노드를 생성하면 루트 노드가 되고, 새로운 노드를 추가하려면 (이중) 연결 리스트의 삽입 연산을 사용함

 

- 노드를 삭제할 때, 삭제하려는 노드가 리프노드인 경우는 해당 노드를 가리키는 포인터를 null로 지정하면 됨

- 리프노드가 아닌 경우에는 삭제하려는 노드의 자식노드에 대한 처리를 추가로 해주어야 함

 

이진 트리의 노드 개수 세는 연산

int get_node_count(nodeptr *root){
	if(root==null)return0;
	int result=1;
	result = get_node_count((nodeptr*)root->left)
	+
		get_node_count((nodeptr*)root->right);
returnresult;	 }
Int get_leaf_count(nodeptr *root){
	int result=0;
	if(root==null){
		return0;
	}elseif(root->left==null&&root->right==null){
		return1; }
	result=get_leaf_count((nodeptr*)root->left)
		+
		get_leaf_count((nodeptr*)root->right);
	returnresult;	}

 

 

06. 일반 트리를 이진 트리로 변환

이진 트리로 변환 방법

일반 트리에 대하여 각 노드의 형제들을 연결

-> 각 노드에 대하여 가장 왼쪽 릉크만 남기고 모두 제거

 

루트노드는 반드시 왼쪽 자식노드 하나만 갖도록 함

 

반응형
LIST

'방송통신대학 > 자료구조' 카테고리의 다른 글

8-2. 스레드 트리의 구현  (0) 2020.12.11
8-1. 스레드 트리  (0) 2020.12.10
7-1 트리  (0) 2020.12.03
6-2 이중 연결 리스트  (0) 2020.11.30
6-1 연결리스트의 응용  (0) 2020.11.29

+ Recent posts