我試圖打印出我的二叉樹預訂形式但是我遇到這些錯誤。我仍然在學習Python,所以我不太確定發生了什麼。但我認爲我的打印功能無法正常工作。不明白爲什麼preorder_print是有一個全局命名問題雖然=/打印預訂中的BST
我的預期產出將是
pre order:
4
2
1
3
8
6
10
輸出:
pre order:
<BST_tree.Node instance at 0x0000000002AA0988>
<BST_tree.Node instance at 0x0000000002AA0E08>
<BST_tree.Node instance at 0x0000000002AA0E88>
我的代碼:
class Node:
def __init__(self,value):
self.right = None
self.left = None
self.value = value
def BST_Insert(root, node): # root --> root of tree or subtree!
if root.value is None:
root = node # beginning of tree
else:
if root.value > node.value: # go to left
if root.left is None:
root.left = node
else:
BST_Insert(root.left, node)
else:
if root.value < node.value: # go to right
root.right = node
else:
BST_Insert(root.right, node)
def preorder_print(root):
print root
if root.left is not None:
preorder_print(root.left)
else:
if root.right is not None:
preorder_print(root.right)
r = Node(4)
# left
a = Node(2)
b = Node(1)
c = Node(3)
# right
d = Node(8)
e = Node(6)
f = Node(10)
BST_Insert(r, a)
BST_Insert(r, b)
BST_Insert(r, c)
BST_Insert(r, d)
BST_Insert(r, e)
BST_Insert(r, f)
print "pre order:"
preorder_print(r)
*編輯*
謝謝大家,特別是abarnert爲您的幫助!這是固定版本!或preorder_print和BST_Inert
def BST_Insert(root, node): # root --> root of tree or subtree!
if root.value is None:
root = node # beginning of tree
else:
if root.value > node.value: # go to left
if root.left is None:
root.left = node
else:
BST_Insert(root.left, node)
if root.value < node.value: # go to right
if root.right is None:
root.right = node
else:
BST_Insert(root.right, node)
def preorder_print(root):
print root.value
if root.left is not None:
preorder_print(root.left)
if root.right is not None:
preorder_print(root.right)
堅持不住了,是你的問題的方式,節點打印出來,或者你只是g的事實而不是6? (另外,你在這裏發佈的代碼仍然有[另一個問題]的錯字(http://stackoverflow.com/questions/19170285/printing-bst-in-pre-order),所以沒有人可以測試它來幫助你調試你的問題。) – abarnert
拍攝,但它實際上都是 – Liondancer
這確實有助於一次提出一個問題。許多人會爭分奪秒地回答一個問題,然後離開,而你會遇到一半未解決的問題。最重要的是,如果其他人將來也有類似的問題,他將無法在搜索中找到你的回答良好的問題,因爲這看起來像是一個關於與他的問題無關的問題。幫助有更多的信息是什麼提出了一個很好的問題。 – abarnert