二叉樹(Binary Tree)是一種樹型結構,它的特點是每個結點至多隻有兩顆子樹(即二叉樹中不存在度大于2的結點),并且,二叉樹的子樹有左右之分,其次序不能任意颠倒。
先序、中序、後序周遊:
先(根)序:先處理根,然後是左子樹,最後是右子樹
中(根)序:先處理左子樹,然後是根,最後是右子樹
後(根)序:先處理左子樹,然後是右子樹,最後是根
樹的周遊方式,先序周遊,遞歸代碼先處理根就好了
class BinTreeNode(object):
'''定義樹的結點'''
def __init__(self, data, left=None, right=None):
# 樹的三個屬性,data用來儲存樹值,left/right:用來儲存左/右子樹結點
self.data, self.left, self.right = data, left, right
class BinTree(object):
def __init__(self, root=None):
self.root = root
def preorder_trav(self, subtree):
'''先(根)序周遊'''
if subtree is not None:
print(subtree.data) # 遞歸函數裡先處理根
self.preorder_trav(subtree.left) # 遞歸處理左子樹
self.preorder_trav(subtree.right) # 遞歸處理右子樹
def inorder_trav(self, subtree):
'''中(根)序周遊'''
if subtree is not None:
self.preorder_trav(subtree.left)
print(subtree.data) # 遞歸函數裡中間處理根
self.preorder_trav(subtree.right)