在Python中对列表中的新对象进行排序

在Python中对列表中的新对象进行排序,python,sorting,oop,object,binary-search-tree,Python,Sorting,Oop,Object,Binary Search Tree,我想请求一些帮助。 我有一个多项式对象,我已经为它建立了数学等式。 比如说,如果我有3X^3+2X^2+X和6X^3+5X^2+4X,那么P2>P1,到目前为止一切都很好 所有这些对象都放在BinarySearchTree中,使用def,我需要在数组中按顺序取出它们,例如: 0 3X^3+2X^2+X 18 将释放[0,18,3X^3+2X^2+X] 我设法制作了一个包含其中所有多项式的数组,但我不知道如何将它们直接发送到已正确排列的数组中,或者如何对数组中的函数进行排序 class Node:

我想请求一些帮助。 我有一个多项式对象,我已经为它建立了数学等式。 比如说,如果我有3X^3+2X^2+X和6X^3+5X^2+4X,那么P2>P1,到目前为止一切都很好

所有这些对象都放在BinarySearchTree中,使用def,我需要在数组中按顺序取出它们,例如: 0 3X^3+2X^2+X 18 将释放[0,18,3X^3+2X^2+X] 我设法制作了一个包含其中所有多项式的数组,但我不知道如何将它们直接发送到已正确排列的数组中,或者如何对数组中的函数进行排序

class Node:
    def inorder(self, fin_list):
        if self:
            fin_list.append(self.value)
            if self.left:
                self.left.inorder(fin_list)
            if self.right:
                self.right.inorder(fin_list)
        return list(fin_list)

如果二进制树中的多项式顺序正确(应该),那么只需读取所有节点,也称为顺序遍历或左节点右遍历(LNR)。您可以通过稍微更改
顺序
函数来实现这一点:

def顺序(自身、财务列表):
如果自我:
#从左撇子开始
如果self.left:
#self.left.inoorder()返回一个列表,您需要将其添加到现有列表中
fin_列表+=自.左.顺序(fin_列表)
#然后添加当前节点的值
fin_list.append(self.value)
#以正确的孩子结束
如果你是对的:
#self.left.inoorder()返回一个列表,您需要将其添加到现有列表中
fin_列表+=自.右.顺序(fin_列表)
退货清单(财务清单)

非常感谢您的帮助!事实上,我早就试过了,但由于某种原因,它不起作用。另一方面,我确实找到了解决问题的办法。如果程序员像我所做的那样,为对象本身添加数学函数,以便能够对它们进行比较,那么Sorted()函数似乎可以处理对象。我所要做的就是在末尾添加排序(fin_list)@D.Z。如果您像示例中一样阅读所有内容,然后将最终列表排序为其他操作,那么您将不必要地浪费时间和资源。二叉树的全部目的是快速读取(如按顺序)等操作。您读取所有数据的速度非常快O(log(n)),但顺序错误,python
sorted()
函数最多只能在O(nlog(n))中工作。就我而言,你在做一些不必要的工作。只需按正确的顺序读取数据。在将数据插入二叉树时,您已经对数据进行了排序。顺便问一下,你是否认为我的答案是正确的?谢谢你的评论和进一步的解释。我对编程还是新手,所以我肯定会随着时间的推移而提高(并且变得更加高效)。对不起,我没有接受答案,但现在是:)祝你有一个美好的一天!
class BST:
    def inorder(self):
        if self.head:
            return self.head.inorder([])
        else:
            return []