メンバー文字列を持つノードを BST に挿入し、その BST に関する情報 (高さ、順序通りのトラバーサル、葉の数など) を出力するプログラムを作成しようとしています...
現時点では、順不同のトラバーサルを行うと、ツリーの最下部にあるはずであっても、最後に入力された文字列がルートとして出力されます。
コードは次のとおりです。
挿入機能:
void insert_node(Node* root, char *nextString) {
int newLessThanRoot = strcmp( root->Word, nextString ) > 0 ? 1 : 0; // test if nextString is left or right from root
if (newLessThanRoot && root->Left != NULL) {
return insert_node(root->Left, nextString);
}
if (!newLessThanRoot && root->Right != NULL) {
return insert_node(root->Right, nextString);
}
Node* freshNode = newNode();
freshNode->Word = malloc(strlen(nextString) +1);
strcpy(freshNode->Word, nextString);
freshNode->Left = NULL;
freshNode->Right = NULL;
if (newLessThanRoot) {
root->Left = freshNode;
}
else {
root->Right = freshNode;
}
}
順序トラバーサル関数:
void inorder(Node *temp) {
if (temp != NULL) {
inorder(temp->Left);
printf("%s ",temp->Word);
inorder(temp->Right);
}
}
それらがどのように使用されているか:
char inputString[15];
char *inputStringPtr = &inputString[0];
Node* root;
root = newNode();
fscanf(infile,"%s",inputStringPtr);
root->Word = inputString;
//printf("Root's word: %s\n",root->Word);
while (fscanf(infile,"%s",inputStringPtr) == 1) {
insert_node(root,inputStringPtr);
printf("%s\n",inputString);
}
int numberOfStrings = num_of_strings(root);
int heightOfBST = height_of_tree(root);
int numberOfLeaves = num_of_leaves(root);
inorder(root);
入力は次のようになります。
b a c e d l m n o p z
したがって、出力(順序どおりのトラバーサルを行う場合)は次のようになります。
a b c d e l m n o p z
しかし、代わりに次のとおりです。
z a c d e l m n o p z