helpen met invoegen op de eerste BST

stemmen
1

EDIT er een klein ding dat ik mis !! de fout is er nog steeds

Dus ik ben een poging om te leren hoe ik mijn eerste BST coderen, en het is moeilijk .... Ik ben al problemen met slechts een paar regels code. het probleem is in de insert, maar ik heb alles opgenomen, zodat ik wat feedback op mijn stijl / andere fouten kunnen krijgen. Ik werd voorgesteld om een ​​pointer naar implementatie pointer gebruiken, maar we havent leerden nog niet, dus voel ik niet troost / weten hoe het nog te coderen. de

fout

[trinhc@cs1 Assignment_3]$ g++ movieList.cpp -o a.out
/tmp/ccLw6nsv.o: In function `main':
movieList.cpp:(.text+0x7a): undefined reference to `Tree::Tree()'
movieList.cpp:(.text+0xa7): undefined reference to `Tree::insert(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status

de tree.h bestand

#ifndef TREE_H
#define TREE_H

#include <string>
#include <iostream>
using namespace std;

class Tree
{
 public:
  Tree();
  bool insert(int k, string s);

 private:
  struct Node
  {
    int key;
    string data;
    Node *left;
    Node *right;
  };
  Node* root;
  bool insert(Node*& root, int k, string s);
};

#endif

tree.cpp

#include <iostream>
#include tree.h
#include <stack>
#include <queue>
#include <string>
using namespace std;

Tree::Tree()
{
  root = NULL;
}

bool Tree::insert(int k, string s)
{
  return insert(root, k, s);
}

bool Tree::insert(Node*& current_root, int k, string s)
{
  if(root == NULL){
    current_root = new Node;
    current_root->key = k;
    current_root->data = s;
    current_root->left = NULL;
    current_root->right = NULL;
    return true;
  }
  else if (current_root->key == k)
    return false;
  else if (current_root->key > k)
    insert(current_root->left, k, s);
  else
    insert (current_root->right,k, s);
}

movieList.cpp

#include <iostream>
#include <stack>
#include <queue>
#include <string>
#include tree.h


using namespace std;

int main()
{
  Tree test;
  test.insert(100, blah);
  return 0;
}
De vraag is gesteld op 27/04/2011 om 03:15
bron van user
In andere talen...                            


4 antwoorden

stemmen
2

Tree-test (); is niet hoe een object van de klasse Test definiëren Deze acutally verklaren functie met de naam test die Tree terugkeert.

proberen

Tree-test; test.instert (100, "blah"); terugkeer 0;

antwoordde op 27/04/2011 om 03:34
bron van user

stemmen
1

Een paar punten:

U moet de naam van uw lid variabele wortel veranderen in iets anders- ik m_root of my_root of tree_root, of iets van dat soort bevelen. Op dit moment heb je een beetje een namespace botsing in een functie waar u onder andere wortel als een argument gekregen. Dit laat je ook bijhouden welke wortel u verwijst naar houden.

bool Tree::insert(Node*& root, int k, string s)
{
    if(root == NULL){
        root = new Node;
        root->key = k;
        root->data = s;
        root->left = NULL;
        root->right = NULL;
        return true;
    } else
        if (root == k) //Comparison between pointer and number.
            return false;
        else
            if (root->key > k)
                insert(root->left, k, s);
            else
                insert (root->right,k, s);
    }

Je moet je root te veranderen op het commentaar lijn naar Root> toets.

Anders dan dat, het lijkt erop dat het zal werken.

EDIT: Ook, wat de andere man zei. U verklaart een object als

TYPE name ()

Als u belt de standaard constructor (), zodat uw code in uw belangrijkste functie zou moeten zijn

Tree test;
test.insert(...)
antwoordde op 27/04/2011 om 03:38
bron van user

stemmen
1

Ik kopieerde een deel van de code en dit werkt prima voor mij:

hoofd:

#include <iostream>
#include <stack>
#include <queue>
#include <string>
#include "tree.h"

    int main()
    {
      Tree test;
      test.insert(100, "blah");
      test.insert(50, "fifty");
      test.insert(110, "one hundred ten");
      return 0;
    }

Invoegen functie:

bool Tree::insert(Node*& currentRoot, int k, string s)
{
  if(currentRoot == NULL){
    currentRoot = new Node;
    currentRoot->key = k;
    currentRoot->data = s;
    currentRoot->left = NULL;
    currentRoot->right = NULL;
    return true;
  }
  else if (currentRoot->key == k)
    return false;
  else if (currentRoot->key > k)
    insert(currentRoot->left, k, s);
  else
    insert (currentRoot->right,k, s);
}

Anders dan dat je syntaxisfouten all over the place. Ik veranderde ook de naam, want als iemand wees er was een beetje een naamgeving probleem. CurrentRoot is logisch, want je dat het passeren van de wortel van de linker of rechter deelboom op elke recursie.

antwoordde op 27/04/2011 om 03:39
bron van user

stemmen
0

Mocht u niet toe te voegen tree.cppaan uw build opdracht?

[Trinhc @ CS1 Assignment_3] $ g ++ movieList.cpp -o a.out

Zou worden

[Trinhc @ CS1 Assignment_3] $ g ++ tree.cpp movieList.cpp -o a.out

antwoordde op 27/04/2011 om 05:01
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more