aider à insérer le premier BST

voix
1

EDIT il une petite chose que je manque !! l'erreur est toujours là

Donc, je tente d'apprendre à coder mon premier BST, et il est difficile .... Je suis déjà des problèmes avec quelques lignes de codes. le problème est dans l'insert, mais je l'ai compris tout pour que je puisse obtenir des commentaires sur mon style / d'autres erreurs. J'ai été suggéré d'utiliser un pointeur sur la mise en œuvre du pointeur, mais nous nai appris encore, donc je ne me sens pas le confort / savoir comment le code encore. la

erreur

[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

le fichier tree.h

#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;
}
Créé 27/04/2011 à 03:15
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
2

Test d'arbre (); est comment définir un objet de test de classe, Cette fonction déclare acutally nommée test qui retourne l'arbre.

essayer

Test de l'arbre; test.instert (100, "bla"); return 0;

Créé 27/04/2011 à 03:34
source utilisateur

voix
1

Couple de points:

Vous devez changer le nom de votre membre racine variable quelque chose que je vous recommande Partout ailleurs m_root ou my_root, ou tree_root, ou quelque chose de ce genre. En ce moment, vous avez un peu d'un choc d'espace de noms dans une fonction où vous incluez racine comme argument. Cela vous permettra également de garder une trace de racine qui vous faites allusion.

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);
    }

Vous devez changer la racine sur la ligne commentée à Root-> clé.

A part cela, il semble que ça va marcher.

EDIT: En outre, ce que dit l'autre gars. Vous déclarez un objet comme

TYPE name ()

si vous appelez le constructeur par défaut (), de sorte que votre code dans votre fonction principale doit être

Tree test;
test.insert(...)
Créé 27/04/2011 à 03:38
source utilisateur

voix
1

Je copiais une partie de votre code et que cela fonctionne bien pour moi:

principale:

#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;
    }

Insérer la fonction:

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);
}

Autre que vous avez des erreurs de syntaxe dans tous les sens. J'ai aussi changé le nom parce que quelqu'un a fait remarquer qu'il y avait un peu d'un problème de nommage. CurrentRoot est logique parce que vous le transmettre la racine du sous-arbre gauche ou à droite sur chaque récursion.

Créé 27/04/2011 à 03:39
source utilisateur

voix
0

Ne devriez - vous ajouter tree.cppà votre commande de construction?

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

Deviendrait

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

Créé 27/04/2011 à 05:01
source utilisateur

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