python - 在二叉搜索树算法中存在递归问题
问题描述
我在尝试在 python 中编写递归预排序算法时遇到问题。这是说我的preOrder
功能没有定义。
NameError: name 'preOrder' is not defined
class Node():
def __init__(self,val):
self.val = val
self.right = None
self.left = None
def preOrder(key):
if key:
print(key.val)
preOrder(key.left)
preOrder(key.right)
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
root.preOrder()
我正在运行 Windows 并使用 Atom 文本编辑器。
解决方案
选项1
如果您想preOrder
成为一个单独的静态方法,您可以简单地将代码取消缩进:
class Node():
def __init__(self,val):
self.val = val
self.right = None
self.left = None
def preOrder(key):
if key:
print(key.val)
preOrder(key.left)
preOrder(key.right)
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
preOrder(root)
因为这现在是一个静态方法,请注意最后一行也发生了变化
选项 2
您可以使 preOrder 成为静态类方法,如下所示:
class Node():
def __init__(self,val):
self.val = val
self.right = None
self.left = None
@staticmethod
def preOrder(key):
if key:
print(key.val)
Node.preOrder(key.left)
Node.preOrder(key.right)
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
Node.preOrder(root)
请注意您现在需要如何调用Node.preOrder
选项 3
我们可以使它成为每个类的方法,如下所示:
class Node():
def __init__(self,val):
self.val = val
self.right = None
self.left = None
def preOrder(self):
print(self.val)
if self.left:
self.left.preOrder()
if self.right:
self.right.preOrder()
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
root.preOrder()
这是保留调用的原始语法的唯一方法。注意函数参数是如何变化的。
推荐阅读
- pdf - PDF 到 Postscript 的转换如何工作?
- html - 为什么 localstorage 必须是字符串?
- javascript - textarea中的HTML代码,弹出结果预览的按钮
- javascript - react-navigation navigationOptions 如何设置功能?
- python - 使用基于多个百分位条件的数据在熊猫中创建新列
- go - 单例实例不断在 Go 中创建新实例
- css - 如何根据子级高度调整固定高度的父级 div?
- matlab - 如何在 Matlab 中使用带有棋盘图像的相机校准来获得以毫米为单位的像素大小?
- jekyll - Jekyll 站点帖子和液体命令连接错误
- socket.io - 套接字 io CORS 被阻止