내가 TREE를 이용해서 간단한 콘솔 프로그램을 만들고 있는데 하나 질문좀 할께
일단 배열이 아닌 포인터를 이용한 TREE이고
root노드에 좌, 우 노드를 삽입하는 insertNode 함수가 있어
예를들면 루트 노드가 있고, insertNode(root) 하면 루트노드 좌, 우에 노드 하나씩 달리는거지
각 노드는 int형 데이터를 하나씩 가지고 있고... 내가 하고 싶은것은 트리의 레벨을 하나씩 올리면서 원하는 값을 찾는거야.
예를들어 처음 루트노드의 값을 비교해보고, 찾는값이 아니면 insertNode함수를 실행하고
그다음 좌 우에 달린 노드들의 값을 찾아보고, 찾는값이 없으면 다시 좌 우 각각에 좌,우 노드를 달아주면서 점점 값을 찾는거지.
내가 만든 insertNode 함수는 이러하다
void insertNode(treeNode* root){
treeNode* leftnode;
treeNode* rightnode;
//root노드의 왼쪽, 오른쪽노드 생성
leftnode = (treeNode*)malloc(sizeof(treeNode));
leftnode->level = root->level +1;
leftnode->total = root->total - leftnode->level;
leftnode->left = NULL;
leftnode->right = NULL;
root->left = leftnode;
if(leftnode->total == numb){
if(answer != -1){
if(leftnode->level < answer) answer = leftnode->level;
else return;
}
else answer = leftnode->level;
}
rightnode = (treeNode*)malloc(sizeof(treeNode));
rightnode->level = root->level + 1;
rightnode->total = root->total + rightnode->level;
rightnode->left = NULL;
rightnode->right = NULL;
root->right = rightnode;
if(rightnode->total == numb)
{
if(answer != -1){
if(rightnode->level < answer) answer = rightnode->level;
else return;
}
else answer = rightnode->level;
}
}
트리에 계속해서 insertNode를 해서 늘려 나가야 하는데, 문제는 적절한 재귀함수 사용법을 모르겠다는 거야...
root노드 값 검사 -> 값 못찾음 -> 좌 우 노드들을 삽입하고 값 검사 -> 값 못찾음 -> 다시 또 좌 우 노드들을 삽입하고 값 검사 -> ...
이런 알고리즘이 되어야 하는데.. 뾰족한 수가 안떠오르네... 한 층 별로 검사를 하는게 아니라 왼쪽 쭉~ 검사하고 이런식으로 되서 자꾸 스택 오버플로 나네... 형들 제발 답좀 알려줘 ㅠㅠ
2진트리면 층별로 검색할필요없이 한번만 쭉 타고 내려 가면 값이 있는지 없는지 검색되잖아
전부를 뒤지는게 아니라 루트에 값이 있냐? 있으면 찾은거 없으면 찾는값이랑 비교해서 크면 오른쪽 작으면 왼쪽으로 내려가면서 찾음 되지
ㅂㅈㄷ 너 글 안읽었지... 일반 트리랑 좀 달라 ㅜㅜ 모양만 트리고
읽었는데? 전체 소스도 없어 어떤 트리인지 명확하지도 않아 그러고서 답변 기대하냐? ㅋㅋ 니 설명이랑 이진트리랑 다른게 뭔데?