我正在使用inorder和递归,但是当我将其与while循环一起使用时,最后一次调用将进入无限循环,但可以与if语句一起正常使用。 有人可以帮助while循环和if语句具有递归实际发生什么
void tree::inorder(node* r)
{
node* temp;
temp = r;
while (temp != NULL)
{
inorder(temp->getleft());
cout << "\n\n\t " << temp->getdata();
inorder(temp->getright());
}
}
答案 0 :(得分:3)
想象一下,您有一个node* head
,其中有一个nullptr
左节点和一个nullptr
右节点。
上面的代码将进入while (temp != NULL)
。
它将在左侧节点上调用inorder(temp->getleft());
。因为该节点是nullptr
,所以它不会进入嵌套调用中的while
。
它将在右侧节点上调用inorder(temp->getright());
。由于该节点为nullptr
,因此不会在嵌套调用中进入while
。
那又是什么?它位于while
的末尾,但是temp
仍指向您的头节点。因此,它将返回到while
的开头。并永远做到这一点。