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

typedef char Element;

typedef struct tTreeNode{
Element data;
struct tTreeNode *left, *right;
}TreeNode;


TreeNode* CreateTree(Element item)
{
TreeNode *pNewNode = (TreeNode*)malloc(sizeof(TreeNode));

if(pNewNode == NULL)
return NULL;

pNewNode->data = item;
pNewNode->left = NULL;
pNewNode->right = NULL;

return pNewNode;
}



void InputTree(TreeNode *root, Element item)
{
if(!root)
{
root=CreateTree(item);
}
else if(!root->left)
{
InputTree(root->left,item);
}
else if(!root->right)
{
InputTree(root->right,item);
}
else
{
InputTree(root->left,item);
}
}




void PreOrder(TreeNode * root)
{
if(root==NULL)
return;

printf("%c",root->data);
PreOrder(root->left);
PreOrder(root->right);
}

void InOrder(TreeNode * root)
{
if(root==NULL)
return;

InOrder(root->left);
printf("%c",root->data);
InOrder(root->right);
}

void PostOrder(TreeNode * root)
{
if(root==NULL)
return;

PostOrder(root->left);
PostOrder(root->right);
printf("%c",root->data);
}

int main() {
int i=0;
char a[100];
TreeNode *p1;

printf("Input a String : ");
scanf("%s",a);
getchar();
while(a[i]!='\0')
{
InputTree(p1, a[i]);
i++;
}
printf("배열 A의 원소는 %s ",a);
printf("\n");
printf("Pre-order : ");
PreOrder(p1);
printf("\n\n");
printf("In-order : ");
InOrder(p1);
printf("\n\n");
printf("Post-order : ");
PostOrder(p1);
printf("\n\n");
printf("Breadth First : ");

return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


글자 키워놓은 부분이 트리에 Node를 붙이는 파트입니다.


함수 내부에서는 메모리 정상할당되고 값도 출력이 잘되는데, 수행을 마치고 함수 밖으로 빠져나오면 root 가 NULL인 채로 있습니다.


이중포인터를 써야하는 느낌이 오는데... 이유가 안 와닿네요.


알려주실 수 있을까요??