原理解析:
有一組數據“3, 5 , 7, 20, 43, 2, 15, 30”,則二叉樹的建立過程如下。
- 將3視爲根節點。
- 5>3,把5作爲3的右節點
- 7>3,7>5,把7作爲5的右節點
- …
- 2<3作爲3的左節點。結果如下圖:
代碼實現:
class BTree(): #二叉樹節點
def __init__(self,value): #初始化子函數
self.left = None #左節點
self.date = value #節點值
self.right = None #右節點
def insertLeft(self,value): #向左子樹插入節點
self.left = BTree(value)
return self.left
def insertRight(self,value): #向左子樹插入節點
self.right = BTree(value)
return self.right
def show(self): #輸出節點數據
print(self.date)
def inorder(node): #中序遍歷,遍歷左子樹 (node爲根節點)
if node.date:
if node.left:
inorder(node.left)
node.show()
if node.right:
inorder(node.right)
def rinorder(node): #中序遍歷,遍歷右子樹
if node.date:
if node.right:
inorder(node.right)
node.show()
if node.left:
inorder(node.left)
def insert(node,value):
if value >node.date:
if node.right:
insert(node.right,value)
else:
node.insertRight(value)
else:
if node.left:
insert(node.left,value)
else:
node.insertLeft(value)
if __name__ == '__main__':
list = [10,3,22,52,11,9,2]
Root = BTree(list[0])
node = Root
for i in range(1,len(list)):
insert(Root,list[i])
print('從小到大')
inorder(Root)
print('從大到小')
rinorder(Root)