树数据结构的递归函数

时间:2015-12-12 09:43:24

标签: c++ recursion data-structures tree

Image is here最高价值是ID,底部与您无关。我需要编写一个接收树顶元素的函数(它们被称为ministries)并沿着树向下检查它的子节点是否与它本身(或其他大部门)相关联。基本上真假的回报是理想的。我只是无法创建函数,因为它总是在最后一次返回时返回false,因为第一个被检查的子项没有指向事工。最后它确实返回true,但是它的用途是什么。

以及代码: 元素(在链表中很像节点)但单个节点有一个包含所有子节点的数组。

class Element {
public:
    int id;
    int value;
    bool is_parent;
    bool is_ministry;
    bool is_children;
    int children_count;
    int children_in;
    bool is_visited;
    Element **children; //CHILDREN ARRAY
    Element* next; //TO NOT LOSE ELEMENTS
    Element(int _id,int _value,int _children_count=0,bool _is_ministry=false){
        this->id=_id;
        this->value=_value;
        this->is_ministry=_is_ministry;
        this->children_in=0;
        this->children_count=_children_count;
        this->next=NULL;
        this->is_visited=false;
        this->is_children=false;
        if(_children_count>0){
            this->is_parent=true;
            this->children = new Element*[_children_count];
        }
        else{
            this->is_parent=false;
            this->children=NULL;
        }
    }
    ~Element(){
        ///delete children;
    }
};

主递归函数:

    bool error_1_recursive(Element *_parent){
            cout << "Inspecting: (in this example the first to come here is id11) " << _parent->id<< " ";
                if(_parent->is_ministry ) {
                    cout << "Found ministry";
                    return true;
                }
///Did not find ministry, going further down the recursion.
                if(_parent->is_parent){
                    for(int i=0;i<_parent->children_in;i++){
                        error_1_recursive(_parent->children[i]);
                    }
                }
        }

我无法为它制作1个函数,因为我需要检查给定的对象是否是事工,因为我需要首先传递的对象实际上是一个事工。

void error_1_recursive_container(Element *_parent){
                cout << "Receives main child with id " << _parent->id << " ";
                Here it goes trough main child children and recursion can start.
    for(int i=0;i<_parent->children_in;i++){
                    if(error_1_recursive(_parent->children[i])==true){
                        cout << "The main child has atleast 1 child that points to ministry" << endl;
                    }
                }
            }

最后,这是一种通过树木的方法。

void Going_around(Element *_parent){
        cout << _parent->id << " ";
        if(_parent->is_parent){
            for(int i=0;i<_parent->children_in;i++){
                Going_around(_parent->children[i]);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您需要在error_1_recursive末尾添加一个return语句。 在循环中调用时,您需要使用error_1_recursive的结果。 如果您想要返回true,只要您获得任何真实结果: if ( 递归调用 ) return true;