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]);
}
}
}
答案 0 :(得分:0)
您需要在error_1_recursive
末尾添加一个return语句。
在循环中调用时,您需要使用error_1_recursive
的结果。
如果您想要返回true,只要您获得任何真实结果:
if (
递归调用 ) return true;