【发布时间】:2020-08-26 23:32:23
【问题描述】:
有没有一种简单的方法来理解什么时候可以只调用递归方法而不是必须将该递归方法设置为变量?
例如...
只需调用递归函数即可遍历:
self.recurse(node.left)
self.recurse(node.right)
必须将递归函数设置为 node.left 和 node.right:
node.left = self.recurse(node.left)
node.right = self.recurse(node.left)
另一个例子是删除 bst 中的一个节点,你必须将递归函数设置为 root.left 和 root.right...我明白但不完全...有什么简单的方法可以理解什么时候可以只需调用递归函数而不是必须将其设置为 node.left、node.right..etc...?
def deleteNode(self, root: TreeNode, key:int) -> TreeNode:
if not root:
return root
if key < root.val:
root.left = self.deleteNode(root.left,key)
elif key > root.val:
root.right = self.deleteNode(root.right,key)
else:
if not root.left:
return root.right
elif not root.right:
return root.left
root.val = self.successor(root.right)
root.right = self.deleteNode(root.right,root.val)
return root
【问题讨论】:
-
如果您需要像示例中那样从子节点中的数据中更改父节点中的字段,请返回一个值并按照您的操作进行分配。如果您不需要像遍历一样改变任何内容,请不要从递归调用中分配任何内容。除了“如果你必须这样做,就这样做,如果你不这样做,就不要”,不知道该说什么。
-
您是否有理由改变现有树而不是返回新树?
标签: recursion tree binary-tree binary-search-tree