我们在哪里可以在递归方法中使用“This”

时间:2010-03-31 02:35:18

标签: c++ binary-tree

我在静态类中有一个方法,它试图将二叉树转换为列表

我想让它递归,但我不能

我在班级中实施了一些其他方法,例如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);
                }

        }

}

2 个答案:

答案 0 :(得分:0)

问题描述难以理解,但我注意到您使用的关键字thisstatic通常是互斥的。

任何static函数都属于一个类,而不是一个对象。可以使用ARB::myStaticFunction()语法调用静态函数,并且不需要实际的ARB对象。因此,this这样的函数内部并不引用任何对象而且没有意义。

答案 1 :(得分:0)

这个电话没有意义:

x=changeit(this.l);

由于this指的是没有名为ARB的成员的l对象。这段代码也是如此:

this->data

您有时会this.data,有时会this->data,所以您似乎对对象指针的概念感到困惑。据称,您ARB的{​​{1}}名为BT*,这是树根。你应该从它开始。

这也是错误的:

p

请勿明确调用x.~LLC(); 的析构函数。

递归地将二叉树放入列表(伪代码)的通用算法:

LLC

这假设tolist(node, list): if node == NULL: return else: tolist(node.left, list) list.append_to_end(node.data) tolist(node.right) 列表是有效的,有意义(这可以通过列表中的结束指针实现)。此外,它将列表作为参数并进行修改。您可以轻松地将其更改为具有执行该操作的内部递归方法以及创建列表的外部方法,调用此方法并返回列表。