二叉树是一种数据结构,我们知道,数组列表的查找效率高,但是插入或删除的效率低,链表则相反,而树的效率则刚好折中,集合了链表和数组的特性,特殊的是,它作为一种非线性表,也有自身的优势。
关键思想:指针,递归
思想:将其递归寻找其自身的左右分枝并打印,停止条件:如果自身为空
"""
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