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二叉排序树内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python RobotFramework的安装过程及应用实战教程

    Python RobotFramework的安装过程及应用实战教程

    这篇文章主要介绍了RobotFramework的安装过程及应用实战教程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Python 语法错误:"SyntaxError: invalid character in identifier"原因及解决方法

    Python 语法错误:"SyntaxError: invalid charac

    本文给大家分享Python 语法错误:“SyntaxError: invalid character in identifier“,原因及解决方法,文末给大家补充介绍了Python出现SyntaxError: invalid syntax的原因总结,感兴趣的朋友跟随小编一起学习吧
    2023-02-02
  • Pycharm搭建一个Django项目的方法步骤

    Pycharm搭建一个Django项目的方法步骤

    本文主要介绍了Pycharm搭建一个Django项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 关于Python的pymouse click 双击的问题

    关于Python的pymouse click 双击的问题

    这篇文章主要介绍了关于Python的pymouse click 双击的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • pybind11在Windows下的使用教程

    pybind11在Windows下的使用教程

    Pybind11算是目前最方便的Python调用C++的工具了, 介绍一下在vs2019上写Python的扩展的HelloWorld,感兴趣的朋友跟随小编一起看看吧
    2019-07-07
  • 网红编程语言Python将纳入高考你怎么看?

    网红编程语言Python将纳入高考你怎么看?

    12月编程语言排行榜出炉,在编程排行榜上,排名第四的是Python。而网络上也疯传,编程语言Python将纳入高考,Python不亏是网红的编程语言
    2018-06-06
  • Python函数any()和all()的用法及区别介绍

    Python函数any()和all()的用法及区别介绍

    any函数:any(x),只要x中有一个不为空,0,false就返回True,否则返回False。all(x)函数必须x中的所有元素均不为空,0,false才会返回True,否则返回False。接下来通过本文给大家介绍Python函数any()和all()的用法及区别介绍,需要的朋友参考下吧
    2018-09-09
  • 使用Python测试Ping主机IP和某端口是否开放的实例

    使用Python测试Ping主机IP和某端口是否开放的实例

    今天小编就为大家分享一篇使用Python测试Ping主机IP和某端口是否开放的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python pygame实现滚动横版射击游戏城市之战

    python pygame实现滚动横版射击游戏城市之战

    这篇文章主要为大家详细介绍了python pygame实现滚动横版射击游戏城市之战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • python中将两组数据放在一起按照某一固定顺序shuffle的实例

    python中将两组数据放在一起按照某一固定顺序shuffle的实例

    今天小编就为大家分享一篇python中将两组数据放在一起按照某一固定顺序shuffle的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论