0
我想在二叉搜索樹上實現簡單的inorder遍歷方法。在Python中使用inorder遍歷(遞歸)打印二叉搜索樹節點
10
/ \
5 15
\
8
我想打印整個樹,但我只打印前3個節點。我的問題是:
- 如何解決我的'inorder'打印方法? 'insert'方法正常工作。 - inorder方法的基本條件是什麼?如何知道在所有節點打印完後停止?
class Tree:
def __init__(self, value):
self.node = value
self.leftChild = None
self.rightChild = None
def insert(self, value):
if self.node is None:
self.node = value
return True
if self.node is not value:
if self.node > value:
if self.leftChild is None:
self.leftChild = Tree(value)
else:
return self.leftChild.insert(value)
if self.node < value:
if self.rightChild is None:
self.rightChild = Tree(value)
else:
return self.rightChild.insert(value)
else:
return False
def inorder(self):
if self:
if self.leftChild:
return self.leftChild.inorder()
print self.node
if self.rightChild:
return self.rightChild.inorder()
tree = Tree(10)
tree.insert(5)
tree.insert(8)
tree.insert(15)
tree.inorder()
> 5
8
10
非常感謝!就是這樣!關於我的基本條件問題,我真的迷失在這些遞歸中。讓我這樣問:假設我們的樹只有4個節點:根是10:10的左邊的孩子是5:10的右邊的孩子是15:5的右邊的孩子是8. Inorder()將以Root開始並調用self。 leftChild.inorder(),它是'5'。現在,節點'5'將再次調用self.leftChild.inorder(),但由於它沒有離開子節點,所以會執行'print self.node'。接下來,它會調用self.rightChild.inorder(),它會將其引導爲8.由於8沒有正確的子節點,它將執行'print self.node'。 – Batool
問題:從節點8,inorder()如何知道它應該一直回到10?它將如何知道所有節點何時被訪問? – Batool
「節點'5'將調用self.leftChild.inorder()」不,如果self.leftChild'意味着它甚至不會嘗試。順便說一句,如果「自我」沒有意義,請刪除它。對你的問題:遞歸不是魔術,它只是函數調用。當一個函數調用完成時,調用該函數的函數將繼續它停止的地方。 Python會跟蹤堆棧中幀中的所有函數調用。我建議單步調試。 [這是一個簡單的](http://www.pythontutor.com/)。它不知道如何做任何你沒有看到或不熟悉的事情。這只是做你告訴它。 –