二叉树方法

时间:2011-10-07 16:19:19

标签: c++ binary-tree

我有以下代码:

#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 :(得分:0)

在结构节点定义

之外移动“void Print(node * p)”函数

答案 1 :(得分:0)

void打印(节点* p){ - &gt; 静态无效打印(节点* p){

否则if(p-&gt; right){ - &gt; 如果(对GT;右){

打印(root); - &gt;的节点::打印(根目录);

答案 2 :(得分:0)

您有两种打印方式:

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

Capital Printnode结构的一部分。小写printBST类的一部分。

您可能遇到的问题:

  • 在课堂外调用print。您需要致电:BST bt; bt.print();
  • Print课程之外调用node。你需要打电话给node n; n.Print(&n);这会有些愚蠢。如果Printnode成为node类,则Print()不需要print()
  • 致电Print(node*) - 没有这样的事情。 {{1}}和{{1}} - 大写问题很重要。

如果这不能回答您的问题,请通过更多信息更新您的问题。复制并粘贴实际的编译器错误,并指出哪一行会给您错误。