Python中的二进制树
|
这是我在 Python中实现二叉树实现的代码片段.这在运行PreOrder函数时起作用. class Node:
def __init__(self,data):
self.left = None
self.right = None
self.data = data
class BinaryTree(Node):
def __init__(self):
self.root = None
def addNode(self,data):
return Node(data)
def insert(self,root,data):
if(root == None):
root = self.addNode(data)
else:
if(data <= root.data):
root.left = self.insert(root.left,data)
else:
root.right = self.insert(root.right,data)
return root
def PreOrder(self,root):
if root == None:
pass
else:
print(root.data)
self.PreOrder(root.left)
self.PreOrder(root.right)
a = BinaryTree()
root = a.addNode(2)
#root = None
a.insert(root,4)
a.insert(root,34)
a.insert(root,45)
a.insert(root,46)
a.insert(root,41)
a.insert(root,48)
a.PreOrder(root)
然而,改变主要的第2和第3行 #root = a.addNode(2) root = None 不打印任何东西.我觉得我错过了一些基本的东西.任何澄清将不胜感激. 解决方法您将None传递给您定义的函数:if root == None:
pass
这就是没有印刷品的原因. 另外,这只是个人观点,我实际上会让PreOrder只接受self参数,并从那里执行PreOrder,这使得递归定义变得非常简单. 基本上是这样的: def PreOrder(self):
print self.data
if self.left:
print self.left.PreOrder()
if self.right:
print self.right.PreOrder()
但这是一个偏好的问题,你的解决方案工作得很好. 作为公然宣传,我实际上写了一篇关于在Python中编写基本BinaryTree的帖子,如果你想查看它,可以在这里找到: http://intothewebs.tumblr.com/post/40256328302/embrace-the-basics-binary-tree 更新: 好的,你发表评论后,我理解你的疑问. 传递给方法的根参数并没有真正改变,因为Python中的params是通过值传递的: How do I pass a variable by reference? 阅读这个问题中接受的答案,它很棒,应该解释我的意思. 你有: root = None a = a.insert(root,4) a.insert... 等等,你的代码应该工作. (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- python – Aiohttp,Asyncio:RuntimeError:事件循环已关闭
- Python __init__.py和类
- Python统计python文件中代码,注释及空白对应的行数示例【测
- Django迁移是否应该在源代码控制中生效?
- python – 了解matplotlib xticks语法
- python – 为什么pow(x,y)的时间复杂度为O(1),而x ** y为O(
- Django i18n blocktrans vs trans
- python – 使用lxml.html提取文本
- 在python列表解析中解包元组(未使用* -operator)
- 如何在python 2.7.6中导入_ssl?
