python实现二叉排序树

 更新时间:2022年01月26日 11:44:51   作者:咕嘟咕嘟_   
这篇文章主要介绍了python实现二叉排序树,

方法一(粗暴)

#二叉排序树
class BTree():
    def __init__(self,data):
        self.left = None
        self.right = None
        if type(data) == list:
            self.data = data[0]
            for d in data[1:]:
                self.insert(d)
        else:
            self.data = data
    def insert(self,data):
        bt = self
        while True:
            if data <= bt.data:
                if bt.left == None:
                    bt.left = BTree(data)
                    break
                else:
                    bt = bt.left
            else:
                if bt.right == None:
                    bt.right = BTree(data)
                    break
                else:
                    bt = bt.right
    def mid_order(self):
        res = []
        stack = []
        node = self 
        while node or stack:
            while node:
                stack.append(node) 
                node = node.left
            node = stack.pop()
            res.append(node.data)
            node = node.right
        return res

data = [5,1,2,3,6,8,9]
bt = BTree(data)
print(bt.mid_order())

方法二(递归)

class TreeNode(object):
    def __init__(self,data):
        self.data = data
        self.left = None
        self.right = None

class BinaryTree(object):
    def insert(self,root, node):
        if root is None:
            return node
        if node.data < root.data:
            root.left = self.insert(root.left, node)
        else:
            root.right = self.insert(root.right, node)
        return root
    def mid_order(self,root):
        node = root
        stack = []
        res = []
        while node or stack:
            while node:
                stack.append(node)
                node = node.left
            node = stack.pop()
            res.append(node.data)
            node = node.right
        return res
    
data = [5,1,2,3,6,8,9]
root = TreeNode(data[0])
tree = BinaryTree()
for i in data[1:]:
    tree.insert(root,TreeNode(i))
print(tree.mid_order(root))

到此这篇关于python实现二叉排序树的文章就介绍到这了,更多相关python二叉排序树内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • win32com操作word之Application&Documents接口学习

    win32com操作word之Application&Documents接口学习

    这篇文章主要为大家介绍了win32com操作word之Application&Documents接口学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • python读取文本中数据并转化为DataFrame的实例

    python读取文本中数据并转化为DataFrame的实例

    下面小编就为大家分享一篇python读取文本中数据并转化为DataFrame的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 10分钟学会使用python实现人脸识别(附源码)

    10分钟学会使用python实现人脸识别(附源码)

    这篇文章主要介绍了10分钟学会使用python实现人脸识别(附源码),帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • Django JSONField的自动转换思路详解(django自定义模型字段)

    Django JSONField的自动转换思路详解(django自定义模型字段)

    如果想实现JSONField的自动转换,可以使用Django REST framework的JSONField,或者自定义一个字段类并覆盖from_db_value()和get_prep_value()方法来实现这个功能,这篇文章主要介绍了Django JSONField的自动转换(django自定义模型字段)问题,需要的朋友可以参考下
    2023-06-06
  • Python中if elif else及缩进的使用简述

    Python中if elif else及缩进的使用简述

    这篇文章主要介绍了Python中if elif else及缩进的使用,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • Python 如何测试文件是否存在

    Python 如何测试文件是否存在

    这篇文章主要介绍了Python 如何测试文件是否存在,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • python和C语言混合编程实例

    python和C语言混合编程实例

    这篇文章主要介绍了python和C语言混合编程实例,文中开发了一个tcp端口ping程序来介绍混合编程,需要的朋友可以参考下
    2014-06-06
  • Python asyncio异步编程常见问题小结

    Python asyncio异步编程常见问题小结

    本文主要介绍了Python asyncio异步编程常见问题小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python模拟百度自动输入搜索功能的实例

    Python模拟百度自动输入搜索功能的实例

    今天小编就为大家分享一篇Python模拟百度自动输入搜索功能的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python使用BeautifulSoup4修改网页内容的实战记录

    Python使用BeautifulSoup4修改网页内容的实战记录

    BeautifulSoup除了可以查找和定位网页内容,还可以修改网页,下面这篇文章主要给大家介绍了关于Python使用BeautifulSoup4修改网页内容的相关资料,需要的朋友可以参考下
    2022-05-05

最新评论