天天看點

Python資料結構之二叉樹并實作先根周遊

       二叉樹(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)
           

繼續閱讀