二叉树方法

binary tree method

本文关键字:方法 二叉树      更新时间:2023-10-16

我有以下代码:

#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()是未定义的。为什么?我已经在课堂上宣布了。

将"void Print(node*p("函数移到结构节点定义之外

无效打印(节点*p({-->静态无效打印(结点*p(}

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

打印(root(-->节点::打印(根(

您有两种打印方法:

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

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

您可能遇到的问题:

  • 在类外调用CCD_ 6。您需要致电:BST bt; bt.print();
  • 在CCD_ 9类之外调用CCD_。你需要打电话给node n; n.Print(&n);,这有点傻。如果Print接受node,那么它就不需要成为node类的一部分
  • 调用Print()——根本没有这样的事情。有print()Print(node*)——大写很重要

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