加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python中的二进制树

发布时间:2021-01-17 12:22:16 所属栏目:Python 来源:互联网
导读:这是我在 Python中实现二叉树实现的代码片段.这在运行PreOrder函数时起作用. class Node: def __init__(self,data): self.left = None self.right = None self.data = dataclass BinaryTree(Node): def __ini

这是我在 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...

等等,你的代码应该工作.

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读