我目前正在做一个创建通用树的项目,该树可以有很多孩子,而父母到孩子的方式是通过第一个孩子(使用指向第一个孩子的指针),而第一个孩子的兄弟姐妹没有指向其父母的指针,而仅指向其下一个(如果有节点)和上一个(相同)的指针,因此兄弟姐妹仅包含2个指针,第一个孩子具有3个指针(父,右,子)。
所以这是问题开始的地方,我创建了removeNode()来删除当前节点而不使用递归函数,然后我不得不删除所选节点(当前)的子树,我试图使用递归,但仍然无法t用我的removeNode()函数找出删除子树的解决方案。是否可以使用递归函数删除我的案例中的DeleteSubtree或有其他方法?
我尝试使用while(pointer-> next!= NULL)来检查孩子是否有兄弟姐妹的递归函数,而在while中我使用if(pointer-> child!= NULL)并在其中使用if使用递归函数deleteSubTree(pointer-> child);在点头有任何点头的情况下,让指针移动孩子。之后,在if函数之外,我使用指针=指针->下一个转到他们的下一个兄弟姐妹。我使用deleteNode()来删除最右边的兄弟(如果有的话)。此逻辑的问题是,如果删除了最右边的节点,则指针将不会移到要删除的上一个节点。
这是deleteNode()函数:
void deleteNode()
{
if(current -> child == NULL)
{
if(current == root)
{
free(root);
cout << "Last Node can't delete !'" << endl;
}
else if(current->next == NULL && current->previous == NULL)
{
temp2 = current->parent;
free(current);
current = temp2;
}
else if(current->next == NULL)
{
temp2 = current->previous;
free(current);
current = temp2;
}
else if(current->previous == NULL)
{
temp = current->parent;
temp2 =current->next;
temp->child = temp2;
temp->child->parent = temp;
temp2->previous = NULL;
current->next = NULL;
free(current);
current = temp2;
}
else
{
temp = current->previous;
temp2 = current->next;
temp->next = current->next;
temp->next->previous = temp;
free(current);
current = temp2;
}
}
else
{
temp = current->child;
if(current == root)
{
if(temp ->next == NULL)
{
free(root);
root = temp;
current = root;
}
else
{
cout << "rootes2";
free(root);
root = temp;
temp = current->next;
current = root;
cout << "ON ROOT";
}
}
else
{
if(temp ->next == NULL)
{
free(root);
root = temp;
current = root;
}
else
{
free(current);
current = temp;
root = current;
temp = current->next;
current->child = temp;
current->child->parent = current;
}
}
}
}
这是deleteSubTree函数:
void deleteSubTree(node* pointer)
{
while (pointer->next != NULL)
{
if (pointer->child != NULL)
{
deleteSubTree(pointer->child);
}
cout << "test";
pointer = pointer->next;
//temp2 = pointer->previous;
}
deleteNode();
}
我为根添加1,为根的第一个孩子添加2,为第一个孩子的兄弟添加3,然后为兄弟的第一个孩子添加4。
此后,我回到了第一个孩子的父级,即值为3的兄弟姐妹,我运行deleteSubTree,结果将是值为4的无穷循环,如果我打印当前节点,它将只有4