2015-01-16 3 views
-3

У меня есть несколько ошибок с моей функцией добавления листьев. Я объявила функцию, которая добавляет, и функцию, которая вызывает функцию добавления. У меня есть несколько ошибок на строках 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. 
} 
+0

У нас нет номеров строк, пожалуйста, покажите (отметьте) строки, где обнаружена ошибка. – Arkadiy

+1

Функция 'addleaf' не возвращает ничего, поэтому она объявлена ​​как' void'. Для операторов присваивания, которые нарушают работу, вам нужно будет 'addleaf' вернуть' Node * '. – Katie

+0

Плохой дизайн кода - слишком много исправлять. – Sadique

ответ

1

addLeaf недействителен, не возвращает никаких значений. Так что ptr->left не может быть приписан ни к чему.

ptr->left = addLeaf(data); 
Смежные вопросы