바이너리 검색 트리에 대한 두 가지 질문이 있습니다. 하나는 작성중인 코드에 관한 것이고 다른 하나는 이론에 관한 것입니다. 우선, 아래에 쓴 코드는 BST가 실제로 비어있는 경우를 표시하려고 할 때를 제외하고는 정상적으로 작동합니다. 그것은 내가 오류 메시지를 출력하고 싶을 때 나에게 세분화 오류를 준다. 어떤 시점에서 포인터가 섞여서 오류가 발생하는 것 같습니다. 여기 내 코드는 다음과 같습니다.바이너리 검색 트리에 대한 두 가지 질문
#include <stdio.h>
#include <stdlib.h>
struct Node {
char *word;
struct Node *left;
struct Node *right;
};
/* Function that creates a new node as a leaf; that is, its */
/* left and right children are NULL. */
/* Require: node -> word != NULL */
struct Node * createNode (char *word) {
struct Node *item = malloc(sizeof(struct Node));
item -> word = word;
item -> left = NULL;
item -> right = NULL;
return item;
}
/* Recursive function that inserts a node into proper position by */
/* searching through tree. */
struct Node * insertNode (struct Node *root, char *word) {
// If tree is empty, node becomes root
if(root == NULL)
return createNode(word);
else {
if(strcmp(word, root -> word) < 0) {
root -> left = insertNode(root -> left, word);
return root;
} else if(strcmp(word, root -> word) > 0) {
root -> right = insertNode(root -> right, word);
return root;
} else if(strcmp(word, root -> word) == 0)
printf("Word is already present in the tree.");
}
}
/* Function to display Binary Search Tree via inorder traversal. */
/* -- prints entire left subtree, then root, then right subtree */
void display (struct Node *root) {
if(root -> word == NULL)
printf("Tree is empty.");
if(root -> left != NULL)
display(root -> left);
printf("%s\n", root -> word);
if(root -> right != NULL)
display(root -> right);
}
void main() {
struct Node root;
struct Node *rootP = &root;
root = createNode("
}
두 번째 질문은 이진 트리를 채우는 것입니다. 물론 알파벳순으로 된 작은 사전을 사용하고 싶습니다. "aardvark"로 시작하는 이진 트리에이 단어를 입력하면 모든 후속 단어가 첫 번째 알파벳순으로 올 수 있기 때문에 트리가 믿을 수 없을 정도로 비뚤어지지 않으므로 항상 올바른 어린이일까요? 믿을 수 없을 정도로 균형 잡힌 나무로 마무리 할까 봐 걱정됩니다! 내가 그것을 채울 때 나무를 뒤적 거리기 위해 사용할 수있는 방법이 있습니까?
시간을내어 읽어 주셔서 감사합니다.
양해 해 주셔서 감사합니다. 나는 지금 그것에 관해 읽을 예정이다 :) –