метод двоичного дерева

#c #binary-tree

#c #двоичное дерево

Вопрос:

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

 #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() это не определено. Почему? Я объявил его внутри класса.

Комментарии:

1. Я думаю, что в функции «print» функция «Print» недоступна без указания имени структуры.

2. Если у вас есть сообщение об ошибке компилятора, которое вы не понимаете, поместите все сообщение об ошибке в свой вопрос (и укажите строку, на которую оно жалуется в вашем исходном коде).

Ответ №1:

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

Ответ №2:

пустая печать (узел * p){ —> статическая пустая печать (узел * p){

else if(p->right){ —> if(p->right){

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

Ответ №3:

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

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

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

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

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

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

Комментарии:

1. @user466534, затем отправьте сообщение об ошибке и укажите строку проблемы. В противном случае мы не сможем вам помочь.