我意识到inorder遍历的代码看起来像
if left[x] != NULL
recurse left
process
right[x] !=NULL
recurse right
我将所有内容编码,运行正常。然后我开始思考更多,并且过度思考过程,现在迷失了递归的实际工作方式。因为我认为一直都是这样,递归会因为两个节点都为空而结束。
如果我一路走来,左右节点都是NULL,那么递归调用如何让我回到父节点继续遍历?
答案 0 :(得分:2)
与所有递归*一样,调用堆栈包含操作的控件,因为递归调用开始返回 - 程序控制返回到您的current_node
指针设置为您之前检查的父项的位置进行递归调用。
(*所有递归,除非有正在进行的尾调用优化,在这种情况下它只是一个循环)。