编程语言
首页 > 编程语言> > python中的BFS来自预购和订购

python中的BFS来自预购和订购

作者:互联网

(Python 2.7)我需要打印具有给定的preorder和inorder以及preorder和inorder字符串的最大长度的二叉树的bfs.
我知道它是如何工作的,例如:
预订:ABCDE
顺序:CBDAE
最大长度:5

                A
             /     \
           B        E
          / \         
         C   D

BFS:ABECD

到目前为止,我已经弄清楚了

class BinaryTree:
    def __init__ (self, value, parent=None):
            self.parent = parent
            self.left_child = None
            self.right_child = None
            self.value=value

    def setLeftChild(self, child=None):
            self.left_child = child
            if child:
                child.parent = self

    def setRightChild(self, child=None):
            self.right_child = child
            if child:
                child.parent = self


preorder={}
inorder={}

print "max string length?"
i=int(raw_input())
count=0
while i>count:
    print"insert the preorder"
    preorder[raw_input()]=count
    count=count+1
print "preorder is",sorted(preorder, key=preorder.get)

count2=0
while i>count2:
    print"insert the inorder"
    inorder[raw_input()]=count2
    count2=count2+1
print "inorder is",sorted(inorder, key=inorder.get)
root=

我想出了如何在python中创建二叉树,但问题是我不知道如何添加下一个子代​​的值.如您所见,我已经有了根节点,并弄清楚了如何插入第一个孩子(左和右),但是我不知道如何添加下一个孩子.

解决方法:

我想本质上的问题是如何从给定的预购和订购中获取树的所有parent-leftChild对和parent-rightChild对

要获取parent-leftChild对,您需要检查:1)节点1是否紧接在节点2之后; 2)如果node2按顺序位于node1的前面

对于您的示例preorder:ABCDE inorder:CBDAE

> B按顺序在A后面,B依次在A前面,因此B是A的左孩子.
> D排在C的后面,但D排在C的后面,因此D不是C的左子

您可以使用类似的技巧来获取所有parent-rightChild对

标签:breadth-first-search,binary-tree,python
来源: https://codeday.me/bug/20191201/2078667.html