Я пытаюсь создать двоичное дерево поиска на основе массива целых чисел.
Я создал функцию BST, которая принимает массив и его размер в качестве параметра. Теперь я вызываю другую функцию makeBST для каждого элемента массива, который принимает узел root и это значение. Он создает другой узел и присоединяет его к узлу root в зависимости от значения.
Но функция makeBST не рекурсивна сама по себе и не выполняет условие NULL для каждого значения массива, даже если узел root не равен нулю
#include<iostream>
#include<cmath>
using namespace std;
class Node {
public:
int data;
Node *left;
Node *right;
};
Node *newNode(int x){
Node *node = new Node();
node->data = x;
node->left=NULL;
node->right = NULL;
return node;
};
void makeBST(Node *node, int x){
if(node==NULL){
// keep getting executed even though root node has a value.
// here must be error.
cout << " NULL condition " << endl;
node = newNode(x);
return;
};
if((node->data) > x){
cout << "also working" << endl;
makeBST(node->left,x);
}else if((node->data) < x){
makeBST(node->right,x);
};
};
Node *BST(int arr[], int n){
Node *root = newNode(arr[0]);
for(int i=1; i<=n-1; i++){
cout << "loop" << i << endl;
makeBST(root,arr[i]);
};
return root;
};
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int n=10;
Node *root = BST(arr,n);
return 0;
};
Я знаю, что это не лучший способ создания бинарного дерева поиска. Но я новичок, и это то, что я могу придумать.
Может кто-нибудь помочь?