CでBinary Serach Treeを実装しようとしています。このコードでは、ツリーに値を追加してその値がツリーにあるかどうかを確認しようとしました。しかし、私の試みたコードは常にtrueを返します。バイナリ検索ツリーで値が正しく認識されない
何度もチェックしました。私はまだCプログラミングを学んでいます。
ここに私のコードです。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct BSTnode {
int data;
struct BSTnode *left;
struct BSTnode *right;
} BSTnode;
BSTnode *getNewNode(int data){
BSTnode *newNode = (BSTnode*)malloc(sizeof(BSTnode));
newNode->data=data;
newNode->left=newNode->right=NULL;
}
BSTnode* InsertNew(BSTnode *root,int data){
if(root == NULL){
root = getNewNode(data);
}
else if(data <= root->data){
root->left = InsertNew(root->left,data);
} else{
root->right = InsertNew(root->right,data);
}
return root;
}
bool search(BSTnode *root, int data){
if(root== NULL) return false;
else if(root->data == data) return true;
else if (data <= root->data) return search(root->left,data);
else return search(root->right,data);
}
int main()
{
//node to store root
BSTnode *root = NULL;
root = InsertNew(root,34);
root = InsertNew(root,4);
root = InsertNew(root,3);
root = InsertNew(root,1);
int num;
printf("enter a number : \n");
num =scanf("%d");
if(search(root,num)==true){
printf("found");
}else{
printf("not found");
}
return 0;
}
私はここで何が欠けていますか?
ありがとうございます。
まだお持ちでない場合は、*デバッガ*の使用方法と、プログラムをデバッグするための使い方を学ぶのに最適な時期です。 Eric Lippertによる[小さなプログラムのデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を読んでみてください。 –
また、で警告を出してコンパイルしてください。たとえば、新しいノードを返す必要があるときは、 'getNewNode'から何も返しません。 –
コードのインデントを修正するようにしてください。これは、あなたとあなたのコードの今後の読者の両方に役立ちます。 –