코딩 이야기

[C언어] 이진트리 전위,중위,후위 표기법으로 표기하기

고주망고 2021. 11. 5. 20:05

다음 이진트리를 전위,중위,후위 표기법으로 표시해보겠습니다.

 

 

실행 결과


#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef struct treeNode {
	char data;
	struct treeNode* left;
	struct treeNode* right;
}treeNode;

treeNode* makeRootNode(char data, treeNode* leftNode, treeNode* rightNode) {
	treeNode* root = (treeNode*)malloc(sizeof(treeNode));
	root->data = data;
	root->left = leftNode;
	root->right = rightNode;
	return root;
}

//전위 표기법
void preorder(treeNode* root) {
	if (root) {
		printf("%c", root->data);
		preorder(root->left);
		preorder(root->right);
	}
}

//중위 표기법
void inorder(treeNode* root) {
	if (root) {
		inorder(root->left);
		printf("%c", root->data);
		inorder(root->right);
	}
}

//후위 표기법
void postorder(treeNode* root) {
	if (root) {
		postorder(root->left);
		postorder(root->right);
		printf("%c", root->data);
	}
}

void main() {
	treeNode* n8 = makeRootNode('H', NULL, NULL);
	treeNode* n7 = makeRootNode('G', NULL, NULL);
	treeNode* n6 = makeRootNode('F', NULL, NULL);
	treeNode* n5 = makeRootNode('E', n7, n8);
	treeNode* n4 = makeRootNode('D', NULL, n6);
	treeNode* n3 = makeRootNode('C', NULL, n5);
	treeNode* n2 = makeRootNode('B', NULL, n4);
	treeNode* n1 = makeRootNode('A', n2, n3);

	printf("전위 표기법:"); preorder(n1);
	printf("\n중위 표기법:"); inorder(n1);
	printf("\n후위 표기법:"); postorder(n1);

}