用递归遍历二叉树时,可能需要记录每个节点的值或者经过的节点数,前者可以用list来实现,由于list是引用对象,递归的每一次函数调用都会对其进行修改, 只需要作为函数的参数传导, 然后直接返回就可以, 不需要用临时变量。如下代码所示:

但是要计算经过的节点数目时,传的是一个普通变量,如果不用临时变量,变量的值在完成该次函数调用之后的修改不会返回到上一层去,必须用临时变量将其记录下来并传入下一个函数中。以下代码是寻找中序遍历的第K个节点并返回其值的代码,可以看到经过的节点数目需要不断的返回并记录。

在使用时要注意这两者的区别,才能得到想要的结果,当然上题还有一种做法是运用全局变量去记录K 和 result,如下图所示

网友评论