将Linklist节点附加到队列

时间:2017-05-02 18:09:29

标签: python python-2.7 python-3.x

我下面有我的代码,我正在从链表中读取数据并从中创建二叉树。我在这里使用一个列表(q)并将self.top附加到它。当我打印时它的价值给了我一些地址。

我不知道那个地址是什么?

接下来,当我弹出队列并将其分配给父级并打印parent.root时,它会打印出值。如何在这里工作?

class createnode:
    def __init__(self,val):
        self.data=val
        self.next=None     ##Creation of Node in link list
class createbinarytree:
    def __init__(self,data):
        self.root=data
        self.left=None
        self.right=None      ##Creation of binary tree nodes
class createlist:
    def __init__(self, data = None):
        self.head = None    
        self.top = None       
    def push(self,val):        
        node=createnode(val)
        if self.head is None:
            self.head=node
        else:
            node.next=self.head  ##Pushing the node to a link list
            self.head=node
    def convertedtree(self):
        q=[]
        if self.head is None:   ##Function to convert link list to binary tree
            self.top = None
            return
        self.top=createbinarytree(self.head.data)
        q.append(self.top)  ##Printing  q here gives some kind off address
        self.head=self.head.next
        while(self.head):
         self.parent=q.pop(0)
         self.Leftchild=None
         self.Rightchild=None
         self.Leftchild=createbinarytree(self.head.data)
         q.append(self.Leftchild)
         self.head=self.head.next
         if(self.head ):
          self.Rightchild=createbinarytree(self.head.data)
          q.append(self.Rightchild)
          self.head=self.head.next
         self.parent.left=self.Leftchild
         self.parent.right=self.Rightchild

      def printlist(self):
        temp=self.head
        while(temp):
          print(temp.data)
          temp=temp.next

conv=createlist();
conv.push(10)
conv.push(20)
conv.push(30)
conv.printlist()
conv.convertedtree()

1 个答案:

答案 0 :(得分:0)

您正在打印列表。如果这个列表是["这","是"," a","列表","", "字符串"]然后你会看到你期望的。但因为它是一个类对象列表,它必须以某种方式打印它们。因此,它默认打印类的名称和实例的地址。

你可能应该有"打印q"在代码中,因为那是你要问的。我补充说,每次q改变后,都得到了这个:

30
20
10
[]
[<__main__.createbinarytree instance at 0x02CB9A58>]
[]
[<__main__.createbinarytree instance at 0x02CB9A30>]
[<__main__.createbinarytree instance at 0x02CB9A30>, <__main__.createbinarytree instance at 0x02CB9A08>]

如果您的类提供了转换为字符串的方法,那么您可以使其打印更有用的信息。见What is the purpose of __str__ and __repr__ in Python?

class createbinarytree:
    def __init__(self,data):
        self.root=data
        self.left=None
        self.right=None      ##Creation of binary tree nodes
    def __repr__(self):
        return "<Node value=" + str(self.root) + ">"

然后我得到像这样的输出

30
20
10
[]
[<Node value=30>]
[]
[<Node value=20>]
[<Node value=20>, <Node value=10>]