使用連結串列實現二叉樹的Python程式


當需要使用連結串列實現二叉樹資料結構時,需要定義設定根節點的方法、執行中序遍歷的方法、在根節點左側插入元素的方法、在根節點右側插入元素的方法以及搜尋值的方法。

下面是一個演示:

示例

 線上演示

class BinaryTree_structure:
   def __init__(self, key=None):
      self.key = key
      self.left = None
      self.right = None

   def set_root(self, key):
      self.key = key

   def in_order_traversal(self):
      if self.left is not None:
         self.left.in_order_traversal()
      print(self.key, end=' ')
      if self.right is not None:
         self.right.in_order_traversal()

   def insert_left(self, new_node):
      self.left = new_node

   def insert_right(self, new_node):
      self.right = new_node

   def search_val(self, key):
      if self.key == key:
         return self
      if self.left is not None:
         temp = self.left.search_val(key)
         if temp is not None:
            return temp
      if self.right is not None:
         temp = self.right.search_val(key)
         return temp
      return None

btree = None

print('Menu (this assumes no duplicate keys)')
print('insert <data> at root')
print('insert <data> left of <data>')
print('insert <data> right of <data>')
print('quit')

while True:
   print('The inorder traversal of binary tree ', end='')
   if btree is not None:
      btree.in_order_traversal()
   print()

   do = input('What would you like to do? ').split()

   operation = do[0].strip().lower()
   if operation == 'insert':
      data = int(do[1])
      new_node = BinaryTree_structure(data)
      sub_op = do[2].strip().lower()
      if sub_op == 'at':
         btree = new_node
      else:
         position = do[4].strip().lower()
         key = int(position)
         ref_node = None
         if btree is not None:
            ref_node = btree.search_val(key)
         if ref_node is None:
            print('No such key exists')
            continue
         if sub_op == 'left':
            ref_node.insert_left(new_node)
         elif sub_op == 'right':
            ref_node.insert_right(new_node)
      elif operation == 'quit':
         break

輸出

Menu (this assumes no duplicate keys)
insert <data> at root
insert <data> left of <data>
insert <data> right of <data>
quit
The inorder traversal of binary tree
What would you like to do? insert 45 at root
The inorder traversal of binary tree 45
What would you like to do? insert 78 left of 45
The inorder traversal of binary tree 78 45
What would you like to do? insert 90 right of 45
The inorder traversal of binary tree 78 45 90
What would you like to do? quit

解釋

  • 建立了名為“BinaryTree_structure”的類。

  • 它有一個“set_root”函式,用於設定樹的根值。

  • 定義了一個名為“in_order_traversal”的方法,用於以“左->節點->右”的順序遍歷樹。

  • 定義了另一個名為“insert_left”的方法,用於在根值的左側新增元素。

  • 定義了另一個名為“insert_right”的方法,用於在根值的右側新增元素。

  • 定義了另一個名為“search_val”的方法,用於從堆疊頂部刪除一個值,並返回被刪除的值。(這段描述與程式碼示例可能不符,需根據實際程式碼修改)

  • 提供了四個選項,例如“插入到根節點”、“插入到…左側”、“插入到…右側”和“退出”。

  • 根據使用者的輸入/選擇,執行相應的操作。

  • 此輸出顯示在控制檯上。

更新於:2021年4月14日

462 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.