python二叉树的实现实例

Python二叉树的实现实例

什么是二叉树?

二叉树是一种特殊的树形结构,它包含一个根节点,每个节点最多有两个子节点,分别为左子节点和右子节点。

如何实现二叉树?

在 Python 中,可以通过定义一个包含节点值、左子树和右子树的二叉树类来实现二叉树。

1. 实现一个二叉树节点类

这个类包含了节点的值和左右子树。代码如下:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

在这个类中,我们定义了一个初始化方法,其中包含节点的值 val,左子树 left 和右子树 right,它们都默认为 None。

2. 实现二叉树类

二叉树类包含了根节点和一些基本操作方法,如插入节点和遍历等。代码如下:

class BinaryTree:
    def __init__(self):
        self.root = None

    def add_node(self, val):
        if self.root is None:
            self.root = TreeNode(val)
            return
        curr = self.root
        while True:
            if val < curr.val:
                if curr.left:
                    curr = curr.left
                else:
                    curr.left = TreeNode(val)
                    break
            elif val > curr.val:
                if curr.right:
                    curr = curr.right
                else:
                    curr.right = TreeNode(val)
                    break

    def inorder(self, node):
        if node is not None:
            self.inorder(node.left)
            print(node.val)
            self.inorder(node.right)

首先,我们在类的初始化方法中定义了二叉树的根节点 self.root 为 None。

其次,我们实现了一个添加节点的方法 add_node(val),它会根据大小比较来决定节点的插入位置。

最后,我们实现了一个中序遍历的方法 inorder(node),它会递归遍历子树,并输出节点的值。

3. 示例说明

考虑一个包含以下节点值的二叉树:

       7
     /   \
    5     9
   / \   / \
  2   6 8   10

我们可以使用二叉树类来实例化一个树对象,并逐个添加节点。对于这个例子,代码如下:

tree = BinaryTree()
tree.add_node(7)
tree.add_node(5)
tree.add_node(2)
tree.add_node(6)
tree.add_node(9)
tree.add_node(8)
tree.add_node(10)

接着,我们可以调用中序遍历方法来遍历这个二叉树:

tree.inorder(tree.root)

输出结果为:

2
5
6
7
8
9
10

可以看到,我们得到了一个按照节点值升序排列的序列。

另外一个示例,我们创建一个只有一个节点的二叉树,并遍历它:

tree = BinaryTree()
tree.add_node(1)
tree.inorder(tree.root)

输出结果为:

1

总结

通过定义二叉树节点类和二叉树类,我们可以很容易地实现一个二叉树,并且可以使用简单的方法来遍历它。在实际开发中,二叉树被广泛应用于算法、数据结构和人工智能等领域,是一种十分重要和基础的数据结构。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python二叉树的实现实例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python中os模块的12种用法总结

    Python 中 os 模块的 12 种用法总结 os 模块是 Python 中一个管理操作系统相关变量和函数的模块,可用于操纵文件和目录名,以及管理进程等。下面总结了 os 模块的12种用法和示例说明。 1. 获取当前工作目录 当前工作目录是指执行程序时所在的目录。 >>> import os >>> os.getcwd…

    python 2023年5月13日
    00
  • 详解爬虫被封的问题

    详解爬虫被封问题的攻略 作为一名爬虫从业者,经常会遇到网站反爬虫的问题。一旦被封,就无法获取数据。下面我们来详细了解一下如何避免或解决爬虫被封的问题。 1. 爬虫被封的原因 爬虫被封的原因主要有以下几个: 请求过于频繁,导致服务器认为是恶意攻击。 模拟登录时使用了错误的方式,使得服务器认为是非法登录行为。 未遵守网站的规则,爬取的内容与网站规则不符合。 爬虫…

    python 2023年5月13日
    00
  • 如何检查NumPy数组中是否存在指定的值

    要检查NumPy数组中是否存在指定的值,可以使用np.isin()函数。该函数返回一个布尔数组,数组中的每个元素都是原数组中对应元素是否与指定值相等的结果。 下面是使用np.isin()函数的方法: 导入NumPy库,创建一个NumPy数组。 import numpy as np arr = np.array([1, 2, 3, 4, 5]) 使用np.is…

    python-answer 2023年3月25日
    00
  • 无法从 Explorer [2013] 通过 IDLE 运行 Python – IDLE 的子进程未建立连接

    【问题标题】:Can’t run Python via IDLE from Explorer [2013] – IDLE’s subprocess didn’t make connection无法从 Explorer [2013] 通过 IDLE 运行 Python – IDLE 的子进程未建立连接 【发布时间】:2023-04-05 21:57:02 【问…

    Python开发 2023年4月6日
    00
  • 深入了解Python 中线程和进程区别

    深入了解Python中线程和进程区别 在Python中,我们可以使用线程和进程来进行并行编程。虽然线程和进程都是用于并行处理的,但它们的定义和功能还是有很大的不同。本文将深入讲解Python中线程和进程的区别,并使用两个实例进行说明。 线程和进程的定义 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程没有自己的系统资…

    python 2023年5月19日
    00
  • python+mongodb数据抓取详细介绍

    下面是详细的攻略: Python+MongoDB数据抓取详细介绍 在Python中,我们可以使用pymongo模块实现与MongoDB数据库的交互,从而实现数据的抓取和存储。本文将对Python+MongoDB数据抓取进行详细介绍,并提供两个示例说明。 连接MongoDB数据库 在使用pymongo模块进行数据抓取之前,我们需要先连接MongoDB数据库。下…

    python 2023年5月14日
    00
  • Python使用pandas导入xlsx格式的excel文件内容操作代码

    下面是“Python使用pandas导入xlsx格式的excel文件内容操作代码”的完整实例教程。 1. 导入需要的库 import pandas as pd 2. 读取Excel文件 使用pandas的read_excel()函数可以读取Excel文件。该函数的参数包括文件名、sheet名以及其他一些配置信息。 df = pd.read_excel(‘ex…

    python 2023年5月13日
    00
  • python 计算概率密度、累计分布、逆函数的例子

    下面是针对“python 计算概率密度、累计分布、逆函数的例子”的完整攻略: 1. 概率密度 计算概率密度通常使用的是概率密度函数(PDF),在python中可以使用scipy库的scipy.stats模块中的概率密度函数方法来计算。这里以正态分布为例,展示计算方法。 from scipy.stats import norm # 设定参数:均值为2,标准差为…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部