2010-03-31 79 views
-1

我在它试图二叉树转换到一个列表我们在哪里可以使用递归方法“这个”

我想使它递归一个静态类的方法,但我不能

我在我的班级中实施了一些其他方法,如add()delete()find()

下面是代码

class ARB 
{ 
     private: 
       struct BT 
       { 
         int data; 
         BT *l; 
         BT *r; 
       }; 
       struct BT *p; 
     public 
       ARB(); 
       ~ARB(); 
       void del(int n); 
       void add(int n); 
}; 

    void ARB::del(int num) 
{ 
//The code ,don't care about it 

    }; 

main() 
{ 
// 
    BTR T; 
    T.add(3); 
    T.add(5); 

}; 

这是我们应该做的转移从二叉树的代码上市。

LLC ARB::changeit() 
{ LLC x; 
     while(this!=NULL) 
     { 
      x.add(this->data); // 
       if(this.l==NULL) 
       { 
         x.print(); //To print the elemnts of List 
         return(x); 
       } 
       else 
       { 
         x=changeit(this.l); 
       } 

       if(this.r!=NULL) 
       { 
         x.~LLC(); 
         x=changeit(this.r); 
         return(x); 
       } 

     } 

} 
+1

究竟是什么问题?你在哪里得到错误?哪些错误? – sth 2010-03-31 02:43:53

+0

该程序未编译,代码中存在概率,但无法找到它 – 2010-03-31 02:51:20

+3

看来OP希望通过递归将二叉树转换为列表,但不知道如何。虽然这个问题似乎与实际问题无关。在能够帮助他之前,似乎有很多概念问题需要解决。谷歌(或搜索 - 如果你在中国)。 – 2010-03-31 02:54:33

回答

0

问题的描述是难以遵循,但我注意到,你所使用的关键字thisstatic,这通常是相互排斥的。

任何static功能属于一个类,而不是一个对象。可以使用ARB::myStaticFunction()语法调用静态函数,并且不需要实际的ARB对象。所以,this里面这样一个函数并没有提到任何对象而且是没有意义的。

0

此呼叫是无意义:

x=changeit(this.l); 

由于this是指具有不构件称为lARB对象。这同样适用于这样的代码:

this->data 

有时你做this.data,有时this->data所以你似乎混淆了一个对象指针的概念。你的ARBBT*这叫做p,它是树根,据说。你应该从它开始。

而且这是obviosly错误:

x.~LLC(); 

不要调用LLC明确的析构函数!

用于递归放置二叉树成一个列表(伪代码)的一般算法:

tolist(node, list): 
    if node == NULL: 
    return 
    else: 
    tolist(node.left, list) 
    list.append_to_end(node.data) 
    tolist(node.right) 

这假定列表的append_to_end是有效的,以使感测(这是可以实现与该列表中的结束指针) 。此外,它将列表作为参数并对其进行修改。您可以轻松地将其更改为具有执行此操作的内部递归方法以及创建列表的外部方法,调用此方法并返回列表。

相关问题