метод двоичного дерева - PullRequest
0 голосов
/ 07 октября 2011

У меня есть следующий код:

#include <iostream>

using namespace std;

class BST{
public:
  int n,*v,vn;
  struct node {
    int val;
    node *left,*right;
    node (int v){ val=v; left=right=0;}
    void Print(node *p){
       cout<<p->val;

       if (p->left){
           Print(p->left);
       }
       else if(p->right){
           Print(p->right);
       }
    }
  };  node *root;

  node *rinsert(node *p,int t){
     if (p==0){
        p=new node(t);
        n++;
     }
     else if (t<p->val){
        p->left=rinsert(p->left,t);
     }
     else if (t>p->val){
        p->right=rinsert(p->right,t);
     }

     return p;
  }
  void traverse(node *p){

    if (p==0) return;
    traverse(p->left);
    v[vn++]=p->val;
    traverse(p->right);
  }
  void print(){
    Print(root);
  }

public:
   BST(int maxelms,int maxval){
       root=0;
       n=0;
   }
   int size(){
      return n;
   }
   void insert(int v){
       root=rinsert(root,v);
   }
   void report(int *x){
       v=x;
       vn=0;
       traverse(root);
   }
};
int main(){
  BST bt(12,25);
  bt.insert(12);
  bt.insert(10);
  bt.insert(25);
  bt.insert(7);
  bt.insert(11);
  bt.insert(8);
  bt.insert(4);
  bt.insert(3);
  bt.insert(20);
  bt.insert(23);
  bt.insert(24);
  bt.insert(1);

  return 0;
}

Компилятор говорит, что Print() не определено. Зачем? Я объявил это в классе.

Ответы [ 3 ]

0 голосов
/ 08 октября 2011

void Print (узел * p) { -> static void Print (узел * p) {

иначе if (p-> right) { -> if (p-> right) {

Печать (корень); -> узел :: Печать (корень);

0 голосов
/ 08 октября 2011

У вас есть два метода печати:

BST::node::Print(node* p);
BST::print();

Капитал Print является частью структуры node.Нижний регистр print является частью класса BST.

Проблемы, с которыми вы можете столкнуться:

  • вызов print за пределами класса.Вам нужно будет позвонить: BST bt; bt.print();
  • , позвонив Print за пределы класса node.Вам нужно было бы позвонить node n; n.Print(&n); Что было бы несколько глупо.Нет необходимости для Print быть частью класса node, если он принимает node.
  • , вызывающего Print() - такой вещи нет.Есть print() и Print(node*) - капитализация имеет значение.

Если это не отвечает на ваш вопрос, пожалуйста, обновите ваш вопрос с более подробной информацией.Скопируйте и вставьте фактическую ошибку компилятора и укажите, какая строка выдает ошибку.

0 голосов
/ 07 октября 2011

переместите вашу функцию "void Print (node ​​* p)" за пределы определения структуры узла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...