在递归调用之前返回和在递归调用之后返回有什么区别
例如,如果我有如下代码
class TreeNode:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
class TreeDiameter:
def __init__(self):
self.treeDiameter = 0
def find_diameter(self, root):
self.calculate_height(root)
return self.treeDiameter
def calculate_height(self, currentNode):
if currentNode is None:
return 0
leftTreeHeight = self.calculate_height(currentNode.left)
rightTreeHeight = self.calculate_height(currentNode.right)
if leftTreeHeight is not None and rightTreeHeight is not None:
diameter = leftTreeHeight + rightTreeHeight + 1
self.treeDiameter = max(self.treeDiameter, diameter)
return max(leftTreeHeight, rightTreeHeight) + 1
有一种基本情况,如果currentNode is None
,则返回0
。但是leftTreeHeight
和rightTreeHeight
被分配递归调用
赋值之后,代码最终返回max(leftTreeHeigth, rightTreeHeight) + 1
这个返回是在递归调用之后完成的,我认为在这一点上程序将结束,但在通过调试器之后,我注意到程序继续并跳过递归函数
我不知道如何描述它,但我的想法是在递归函数中,我会沿着左子树和右子树,每次如果找到一个节点,就加1。获取其根节点左侧的最大高度和右侧的最大高度加1,并在最后返回根的最大左侧树高度和最大右侧树高度加1
我认为所有这些都将在递归调用之前完成。我认为递归调用之后的任何事情都只会发生一次。我知道这不是它的工作原理,但如果我能解释我不确定这个程序是如何工作的,我可以写出步骤
一旦我们在递归函数中calculate_height
leftTreeHeight
rightTreeHeight
leftTreeHeight
和rightTreeHeight
都应该是0leftTreeHeight
和rightTreeHeight
都是0,所以应该返回1
李>在最后一步之后,我认为函数将结束,我不理解代码如何在递归函数中继续跳转。另外,我知道如果它像我提到的那样返回1,那么它将始终是1,结果将是错误的。我不是问我是否正确,因为我知道我错了,我只是想澄清一下。我很难想象
目前没有回答
相关问题 更多 >
编程相关推荐