본문 바로가기
C언어

[C언어] 이진트리 전위순회법, 중위순회법, 후위순회법을 작성하시오

by 이얏호이야호 2022. 12. 3.

게시물 확인하시고 공부에 도움이 됐으면 좋겠습니다.

코드를 확인해주세요

 

더보기
#include <stdio.h> 
#include <stdlib.h>   
typedef char ElementType;   
typedef struct tagNode {     
	struct tagNode* left;     
	struct tagNode* right;     
	ElementType data; 
} Node;   
Node* CreateNode(ElementType newData); 
void DestroyNode(Node* node); 
void DestroyTree(Node* root); 
void PreOrderPrintTree(Node* node); 
void InOrderPrintTree(Node* node); 
void PostOrderPrintTree(Node* node);   



//노드생성
Node* CreateNode(ElementType newData) 
{        
	Node* newNode = (Node*) 
	malloc(sizeof(Node));// 노드를 위한 메모리 할당
	newNode->left = NULL;
	newNode->right = NULL;
	newNode->data = newData; 
return newNode;
}   
//노드 파괴
void DestroyNode(Node* node)
{     
	free(node); 
}   
//후위순위를 활용한 트리파괴
void DestroyTree(Node* root) 
{     
	if(root == NULL)         
	return;          
	DestroyTree(root->left);// 왼쪽 하위 트리 소멸  
	DestroyTree(root->right); //오른쪽 하위 트리 소멸 
	DestroyNode(root); // 루트 노드 소멸 
}   

// 전위 순회 
void PreOrderPrintTree(Node* node) {  
	if(node == NULL)
	return;  
	printf(" %c", node->data); // 부모 노드 출력
	PreOrderPrintTree(node->left);// 왼쪽 하위 트리 출력
	PreOrderPrintTree(node->right);// 오른쪽 하위 트리 출력
}   
//중위 순회 
void InOrderPrintTree(Node* node) {
	if(node == NULL) 
	return;
	InOrderPrintTree(node->left);// 왼쪽 하위 트리 출력
	printf(" %c", node->data);// 부모 노드 출력
	InOrderPrintTree(node->right);// 오른쪽 하위 트리 출력
}
//후위 순회
void PostOrderPrintTree(Node* node) {
	if(node == NULL)
	return;
	PostOrderPrintTree(node->left);// 왼쪽 하위 트리 출력
	PostOrderPrintTree(node->right);// 오른쪽 하위 트리 출력
	printf(" %c", node->data);// 부모 노드 출력
} 

  
void main() {       
	Node* A = CreateNode('A');   // 노드 생성     
	Node* B = CreateNode('B');     
	Node* C = CreateNode('C');     
	Node* D = CreateNode('D');     
	Node* E = CreateNode('E');     
	Node* F = CreateNode('F');     
	Node* G = CreateNode('G'); 
	A->left  = B;   // 트리에 노드 추가
	B->left  = C;  
	B->right = D;
	A->right = E; 
	E->left  = F; 
	E->right = G;            
	printf("PreOrder...\n");  // 트리 출력   
	PreOrderPrintTree(A);     
	printf("\n\n");
	printf("InOrder...\n");     
	InOrderPrintTree(A);     
	printf("\n\n");
	printf("PostOrder...\n");     
	PostOrderPrintTree(A);     
	printf("\n");           
	DestroyTree(A); // 소멸 
}

 

 

 

 

 

더 많은 C언어 글이 궁금하다면?

https://chuinggun.tistory.com/category/C%EC%96%B8%EC%96%B4

 

댓글