當試圖做廣度優先解決方案時,我遇到了意想不到的行爲。 在函數levelOrder中,如果左節點首先被處理,那麼它會給出正確的結果3 2 5 1 4 7,如果在左節點之前保留右節點,則輸出爲3 5 2 7 4 1.Python列出意外的行爲?
I不知道是什麼導致了這種行爲。 這個問題已經被問過hackerrank
給定的輸入是
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)
哪一部分不明白?這是BFS的預期行爲。 –
嗨Ignacio,在* list *作爲根,左和右追加的部分,但是當從列表中打印時,它會打印根,左和右。 – someone