我想用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;
}
我在這裏錯過了什麼?
在此先感謝。
如果你還沒有,那麼這是學習如何使用調試器* *,以及如何使用它(和其他技術)爲*調試*您程序的最佳時機。我建議你花一些時間埃裏克利珀閱讀[如何調試小程序(https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –
並且還在編譯時發出警告。例如,當你應該返回新節點時,你不會從'getNewNode'返回任何東西。 –
嘗試修復代碼的縮進 - 這將有助於您和未來的代碼讀者。 –