У меня есть несколько ошибок с моей функцией добавления листьев. Я объявила функцию, которая добавляет, и функцию, которая вызывает функцию добавления. У меня есть несколько ошибок на строках 52 и 63. Как мне преобразовать из void или мне нужно будет использовать что-то еще?Двоичное дерево поиска - добавление листьев
Ошибка 2 Ошибка C2440: '=': не удается преобразовать из 'пустоты' в 'SDI :: BST :: Node *'
Заголовок файла:
#ifndef SDI_BT
#define SDI_BT
namespace SDI
{
class BST
{
class Node
{
public:
int data; //data element
Node* left; //pointers to left and right of data element
Node* right;
private:
};
private:
Node* root; //node for top of tree, starting node
Node* newLeaf(int data); //creates new leaf node
void leafSort(int data, Node* ptr);
void printSort(Node* ptr);
public:
BST(); //constructor
~BST(); //destructor
void addLeaf(int data); //functions that access nodes
void print();
};
}
#endif
каст файла:
#include <iostream>
#include <string>
#include <fstream>
#include "BinaryTree.h"
using namespace SDI;
int main()
{
system("pause");
return 0;
}
BST::BST()
{
root = NULL; //assign root to nothing so it is at start
}
BST::Node* BST::newLeaf(int data)
{
Node* newNode = new Node; //node pointer for returning
newNode->data = data;
newNode->left = NULL; //assign left and right to nothing to start
newNode->left = NULL;
return newNode;
}
BST::~BST()
{
}
void BST::leafSort(int data, Node* ptr)
{
if (root == NULL) //if tree is empty
{
root = newLeaf(data); //create leaf with stuff passed into data
}
else if (data < ptr->data) //find out if pointing to left child
{
if (ptr->left != NULL) //if left node is pointing to something, if something is there
{
leafSort(data, ptr->left); //move down left pointer
}
else
{
**ptr->left = addLeaf(data);** //add new leaf
}
}
else if (data < ptr->data) //find out if pointing to right child
{
if (ptr->right != NULL) //if right node is pointing to something, if something is there
{
leafSort(data, ptr->right); //move down right pointer
}
else
{
**ptr->right = addLeaf(data);** //add new leaf
}
}
else
{
std::cout << data << "is in list already!" << std::endl;
}
}
void BST::addLeaf(int data)
{
leafSort(data, root); //call from privateLeaf function as that worries about where to add leaf etc.
}
void BST::printSort(Node* ptr)
{
if (root != NULL) //something in tree
{
if (ptr->left != NULL) //if left pointer is pointing to something
{
printSort(ptr->left); //traverse down nodes
}
std::cout << ptr->data << " "; //prints data
if (ptr->right != NULL) //if right pointer pointing to something
{
printSort(ptr->right); //traverse down nodes
}
std::cout << ptr->data << " ";
}
else
{
std::cout << "tree empty" << std::endl;
}
}
void BST::print()
{
printSort(root); //call from private print function as that worries about how to print etc.
}
У нас нет номеров строк, пожалуйста, покажите (отметьте) строки, где обнаружена ошибка. – Arkadiy
Функция 'addleaf' не возвращает ничего, поэтому она объявлена как' void'. Для операторов присваивания, которые нарушают работу, вам нужно будет 'addleaf' вернуть' Node * '. – Katie
Плохой дизайн кода - слишком много исправлять. – Sadique