Python 3.x Python列出意外行为?

Python 3.x Python列出意外行为?,python-3.x,breadth-first-search,Python 3.x,Breadth First Search,在尝试广度优先解决方案时,我遇到了一个意想不到的行为。 在函数级别顺序中,如果先处理左节点,则给出正确的结果3 2 5 1 4 7,如果右节点保持在左节点之前,则输出为3 5 2 7 4 1 我不知道是什么导致了这种行为。 这个问题已经被问过了 给定的输入是 3 / \ 2 5 / \ \ 1 4 7 我的代码 import sys class Node: def __init__(self,data): self.

在尝试广度优先解决方案时,我遇到了一个意想不到的行为。 在函数级别顺序中,如果先处理左节点,则给出正确的结果3 2 5 1 4 7,如果右节点保持在左节点之前,则输出为3 5 2 7 4 1

我不知道是什么导致了这种行为。 这个问题已经被问过了

给定的输入是

     3
   /   \
  2     5
 / \     \
1   4     7
我的代码

import sys
class Node:
    def __init__(self,data):
        self.right=self.left=None
        self.data = data
class Solution:
    def insert(self,root,data):
        if root==None:
            return Node(data)
        else:
            if data<=root.data:
                cur=self.insert(root.left,data)
                root.left=cur
            else:
                cur=self.insert(root.right,data)
                root.right=cur
        return root

    def levelOrder(self,root):
        #Write your code here
        lisT = []
        i = 0
        lisT.append(root)

        while i < len(lisT):
            if root.left:
                lisT.append(root.left)
            if root.right:
                lisT.append(root.right)

            i += 1
            #print('i=',i,' len(lisT)=',len(lisT))
            try:
                root = lisT[i]
            except Exception as e:
                i = len(lisT)
        for each in lisT:
            print(each.data, end=' ')

            T=int(input())
myTree=Solution()
root=None
for i in range(T):
    data=int(input())
    root=myTree.insert(root,data)
myTree.levelOrder(root)            
导入系统 类节点: 定义初始化(自身,数据): self.right=self.left=None self.data=数据 类解决方案: def插入(自身、根、数据): 如果根=无: 返回节点(数据) 其他:
如果数据你已经给了自己解释。如果你从右到左,你会得到相反的每一个级别。2 5->5 2和14 7->7 4 1

对于解决方案,您还应该考虑队列。使用先进先出,您可以在每个级别中追加左分支和右分支(如果没有),然后使用列表的第一个元素打印出下一个级别。当队列为空时,您就完成了


作为补充,您应该避免
异常除外
,并更具体地说明异常,在本例中是
索引器
。这是一种通用的编码风格,可以防止您不想处理的异常处理(如键盘中断)。

哪部分不需要理解?这是BFS的预期行为。嗨,Ignacio,在列表中作为root、left和right追加的部分,但从列表中打印时,它会打印root、right和left。谢谢Abufari,我会记住有关异常的内容。如果您注意到了代码,那么下一个元素将被追加到列表的末尾,在读取时,它将从索引0中读取,这使得它成为FIFO。我需要了解其行为,为什么从右向左的元素会被反转。我的理解是,我在列表中先左后右地显示根,但是当从列表中打印时,它会打印根,然后右后左,问题是是是什么导致了这种行为。