使用链表实现二叉树的Python程序

使用链表实现二叉树的Python程序

当使用链表实现二叉树数据结构时,定义一个设置根节点、一个执行中序遍历的方法、一个插入元素到根节点左侧的方法、一个插入元素到根节点右侧的方法以及一个搜索值的方法。

下面是同样的演示——

更多Python相关文章,请阅读: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('菜单(假定没有重复键)')
print('在根节点插入 <data>')
print('在 <data> 左侧插入 <data>')
print('在 <data> 右侧插入 <data>')
print('退出')

while True:
    print('二叉树的中序遍历 ', end='')
    if btree is not None:
        btree.in_order_traversal()
    print()

    do = input('您想做什么?').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('没有这样的键')
                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

输出

菜单(假定没有重复键)
在根节点插入 <data>
在 <data> 左侧插入 <data>
在 <data> 右侧插入 <data>
退出
二叉树的中序遍历
您想做什么? insert 45 at root
二叉树的中序遍历 45
您想做什么? insert 78 left of 45
二叉树的中序遍历 78 45
您想做什么? insert 90 right of 45
二叉树的中序遍历 78 45 90
您想做什么? quit

解释

  • 创建了‘BinaryTree_structure’类。

  • 它有一个‘set_root’函数,帮助设置树的根值。

  • 定义了一个名为‘in_order_traversal’的方法,帮助按照‘Left->Node->Right’的顺序遍历树。

  • 另一个名为‘insert_left’的方法被定义,帮助在根值左侧添加一个元素。

  • 另一个名为‘insert_right’的方法被定义,帮助在根值右侧添加一个元素。

  • 另一个名为‘search_val’的方法被定义,帮助从栈顶删除一个值,并返回删除的值。

  • 提供了四个选项,例如‘插入到根’、‘插入到左侧’、‘插入到右侧’和‘退出’。

  • 根据用户的输入/选择,执行相应的操作。

  • 在控制台上显示该输出。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程