二叉樹是一種數據結構,我們知道,數組列表的查找效率高,但是插入或刪除的效率低,鏈表則相反,而樹的效率則剛好折中,集合了鏈表和數組的特性,特殊的是,它作爲一種非線性表,也有自身的優勢。
關鍵思想:指針,遞歸
思想:將其遞歸尋找其自身的左右分枝並打印,停止條件:如果自身爲空
"""
the tree test and compile
"""
#the class of the tree node
class TreeNode(): #節點類,包含了左子樹,右子樹,和數據
def __init__(self,data = None, left =None, right = None):
self.data = data
self.left = left
self.right = right
#the class of the binary tree
class Binarytree(): #樹類,有且只有唯一的根爲root
def __init__(self, root = None):
self.root = root
def is_empty(self): #判斷根是否爲空,證明樹是否空
if self.root == None:
return True
return False
# pre_traversal
def pre_traversal(self,node): #前序法搜索,先打印,再遞歸其左右樹
if node is None:
return
print(node.data,end = ' ')
self.pre_traversal(node.left)
self.pre_traversal(node.right)
#inorder traversal #中序
def in_traversal(self,node):
if node is None:
return
self.post_traversal(node.left)
print(node.data, end = ' ')
self.post_traversal(node.right)
#post traversal #後序,運行到最後纔打印
def post_traversal(self,node):
if node is None:
return
self.post_traversal(node.left)
self.post_traversal(node.right)
print(node.data, end = ' ')
if __name__ == "__main__": #測試
b = TreeNode('B')
f = TreeNode('F')
g = TreeNode('G')
d = TreeNode('D',f,g)
i = TreeNode('I')
h = TreeNode('H')
e = TreeNode('E', i, h)
c = TreeNode('C', d, e)
a = TreeNode('A', b, c)
bt = Binarytree(a)
bt.pre_traversal(bt.root)
print('\n')
bt.post_traversal(bt.root)
print('\n')
bt.in_traversal(bt.root)
測試結果:正常 ,實現了二叉樹的順序遍歷
A B C D F G E I H
B F G D I H E C A
B A F G D I H E C
Process finished with exit code 0