Data Structure – Tree (Node)

3 * 2 + 30 / 6을 트리로 구현하며 트리를 이해한다

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

typedef struct Tree {
	int data;
	struct Tree * left;
	struct Tree * right;
}TreeNode;

void inorder_rec(TreeNode *t) {
	if (t != NULL) {
		inorder_rec(t->left);
		if (t->data == '+' || t->data == '*' || t->data == '/')
			printf("%c ", t->data);
		else
			printf("%d ", t->data);
		inorder_rec(t->right);
	}
}


void insert_right(TreeNode *t, int data) { 
	TreeNode * ptr = (TreeNode *)malloc(sizeof(TreeNode));
	ptr->data = data;
	ptr->right = NULL;
	ptr->left = NULL;
	t->right = ptr;
}

void insert_left(TreeNode *t, int data) {
	TreeNode * ptr = (TreeNode *)malloc(sizeof(TreeNode));
	ptr->data = data;
	ptr->right = NULL;
	ptr->left = NULL;
	t->left = ptr;
}

TreeNode cons_threadTree(TreeNode * root) {
	// root 노드
	root->data = '+';
	insert_left(root, '*');
	insert_right(root,'/');

	// root노드의 왼쪽 서브 트리
	insert_left(root->left, 3);
	insert_right(root->left, 2);

	// root노드의 오른쪽 서브 트리
	insert_left(root->right, 30);
	insert_right(root->right, 6);

	return *root;
}

int main() {
	TreeNode T;
	T = cons_threadTree(&T);

	printf("\n중위 순회의 순환적 버전: ");
	inorder_rec(&T);
}

Leave a Reply

Your email address will not be published. Required fields are marked *