与你交谈系列#3

介绍

今天我们将介绍二叉树的理论和实践基础以及遍历它的方法。

树通常是图族的子集,其构建和管理遵循一定的规则。

二叉树

二叉树是一种具体的数据结构,其中每个节点最多有两个子节点。通常每个节点都有 3 个属性:data、leftchild 和 rightchild。

它用于按“标准”对不同类型的二叉树进行分类。

让我们看看那里存在哪些类型(类):

基于子节点数量的二叉树类型(标准:子节点的节点数量)基于级别完成的二叉树类型(标准:级别的树完成)基于节点值的二叉树类型(标准:节点值)

让我们分别看看每种类型。

基于子节点数量的二叉树类型

完整二叉树退化(或病态)树倾斜二叉树

基于级别完成的二叉树类型

完全二叉树完美二叉树平衡二叉树

基于节点值的二叉树类型

二叉搜索树avl 树红黑树b树b+树线段树

如果您想更深入地了解其中每一个,这里有完整的概述。

很好,现在我们从概念上了解什么是二叉树以及可能的类型。

image description

现在,让我们编写代码。回想一下,二叉树由节点组成,每个节点都有数据、leftchild 和 rightchild 属性。

from typing import anyclass treenode:    def __init__(self, data: any):        self.data = data        self.left = none        self.right = none# define all the nodes we needroot = treenode('r')nodea = treenode('a')nodeb = treenode('b')nodec = treenode('c')noded = treenode('d')# connect all the nodes between each otherroot.left = nodearoot.right = nodebnodea.left = nodecnodea.right = noded# what we've got    r   /   a   b /  c   d

接下来至关重要的就是如何遍历二叉树。

遍历二叉树

通常来说,遍历二叉树主要有2种方式(类型),广度优先搜索(bfs)和深度优先搜索(dfs)。

bfs 表示在进入树中的下一层之前访问同一级别的节点。这意味着树是在更侧面的方向上探索的。

dfs 代表当遍历树一直向下移动到叶节点时,向下逐枝探索树。

此外,dfs 遍历还有三种类型:

预购下单后按顺序

dfs及其遍历类型

"""preorder - is done by visiting the root node first, then recursively do a pre-order traversal of the left subtree, followed by a recursive pre-order traversal of the right subtree.this traversal is "pre" order because the node is visited "before" the recursive pre-order traversal of the left and right subtrees."""def pre_order(node):    if node:        print(node.value)        pre_order(node.left)        pre_order(node.right)

与你交谈系列#3

"""postorder - works by recursively doing a post-order traversal of the left subtree and the right subtree, followed by a visit to the root node.what makes this traversal "post" is that visiting a node is done "after" the left and right child nodes are called recursively."""def post_order(node):    if node:        post_order(node.left)        post_order(node.right)        print(node.value)

与你交谈系列#3

"""inOrder - does a recursive In-order Traversal of the left subtree, visits the root node, and finally, does a recursive In-order Traversal of the right subtree.What makes this traversal "in" order, is that the node is visited in between the recursive function calls. The node is visited after the In-order Traversal of the left subtree, and before the In-order Traversal of the right subtree."""def in_order(node):    if node:        in_order(node.left)        print(node.value)        in_order(node.right)

与你交谈系列#3

今天就这样。总结一下,我们修改了什么是二叉树,它的类型按标准划分,以及遍历它的方法是什么。

以上就是与你交谈系列#3的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1348378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 11:59:26
下一篇 2025年12月8日 22:17:19

相关推荐

  • 高级成绩系统(需要帮助)

    场景:一所学校使用详细的评分系统,根据学生的参与情况、完成的作业以及考试成绩来调整学生的成绩: 基础成绩根据考试成绩计算:A(90-100)、B(80-89)、C(70-79)、D(60-69)、F(60以下)。如果学生的参与度位于前 10%,则在其基础成绩上添加一个年级(B 变为 A)。如果完成的…

    2025年12月13日
    000
  • 一个新的网络安全/密码学存储库

    嘿,我目前正在开发一个用 python 编写的开源网络安全和密码学存储库,它位于 github 上。 此仓库目前有多种功能: 异或运算。简洁的ECB加密/解密功能。​​简洁的CBC加解密功能。​​还有一个很酷的功能,让你玩得开心。我目前正在研究CTR功能。 此存储库当前是一个 python 库,但我…

    2025年12月13日
    000
  • dnenvpy:管理本地NET SDK版本的基本工具

    现代 .net 的强大功能之一是能够并行运行多个 sdk 版本:我可以很高兴在本地计算机上拥有 .net 6 和 .net 8 项目,并且使用正确的 sdk! 执行此操作的方法之一是通过项目根目录中的 global.json 文件,如下所示。 事实上,该文件可以放置在任何目录中,并将为该目录及其所有…

    2025年12月13日
    000
  • 史诗级喷涂泡沫网站的创建:挑战、技术和未来目标

    构建 Epic Spray Foam 网站的旅程是一次全面且富有挑战性的工作,其特点是技术障碍和战略决策。在这篇文章中,我们深入探讨了创建 Epic Spray Foam 网站的过程、我们遇到的困难、采用的技术以及我们对未来的愿景。 1.发展历程创建 Epic Spray Foam 网站涉及精心设计…

    2025年12月13日
    000
  • 游戏中的精灵动画

    游戏开发中动画精灵的基础知识: **在制作 2D 游戏时对精灵进行动画处理是该游戏非常重要的一部分。 我要讲的方法实际上适用于每个游戏框架: > 逻辑很重要,语法不重要。 以下是实现动画的一些步骤: 抓住一个精灵表,最好将其分成框架,但如果你不想浪费时间,你也可以使用精灵表,但另一个博客的情况…

    2025年12月13日
    000
  • 构建稳健的法学硕士申请的基本实践

    介绍 我一直在云端构建 llm 应用程序。我还看到很多开发人员制作 llm 应用程序,这对于 mvp 或原型来说非常好,但需要一些工作才能使其做好生产准备。应用所列出的一种或多种实践可以帮助您的应用程序以有效的方式进行扩展。本文不涵盖应用程序开发的整个软件工程方面,而仅涵盖 llm 包装应用程序。此…

    2025年12月13日
    000
  • Python 虚拟环境

    长话短说 本质上,这允许您为您创建的每个 python 应用程序创建一个隔离的环境。这意味着每个应用程序可以使用不同的库,甚至同一库的不同版本,而不会互相干扰。 什么是 venv python 虚拟环境或 venv 是一个轻量级的独立目录树,其中包含特定版本 python 的 python 安装,以…

    2025年12月13日
    000
  • python如何内容居中

    如何在 python 中使内容居中 在 Python 中使内容居中的常见方法有两种: 1. 使用内置的 justify() 方法 justify() 方法可用于将字符串居中。它采用一个可选参数 width,该参数指定对齐的宽度。如果省略 width,则字符串将与终端宽度对齐。以下是如何使用 just…

    好文分享 2025年12月13日
    000
  • python如何计算总订单数

    如何使用 Python 计算总订单数:导入 pandas 模块;加载订单数据到 pandas DataFrame 中;使用 DataFrame 的 count() 或 len() 函数计算订单总数;打印结果。 如何使用 Python 计算总订单数 要使用 Python 计算总订单数,可以使用以下步骤…

    2025年12月13日
    000
  • python如何弹出输入窗口

    要使用 Python 弹出输入窗口,可以使用以下两种方法:使用 tkinter 模块:导入 tkinter 并创建一个窗口、标签、输入文本框定义一个函数来获取用户输入创建一个按钮并绑定到该函数进入主事件循环使用 PySimpleGUI 模块:导入 PySimpleGUI 并创建一个输入弹出窗口显示窗…

    2025年12月13日
    000
  • python如何安装pip模块

    如何使用 Python 安装 pip 模块?验证 pip 是否已安装,如果没有,请按照步骤 1 中的说明进行安装。在命令行终端中运行以下命令:pip install 运行 pip list 验证已安装模块。 如何使用 Python 安装 pip 模块 pip 是 Python 包管理工具,允许用户轻…

    2025年12月13日
    000
  • python如何安装pip3

    方法 1:使用 Python 包管理器(pip):确保已安装最新 pip 版本:python -m pip install –upgrade pip安装 pip3:python -m pip install pip3 如何在 Python 中安装 pip3 方法 1:使用 Python …

    2025年12月13日
    000
  • python如何下载安装包

    在 Python 中下载安装包有两种方法:使用 pip 命令(推荐方法):确保已安装 pip。运行 pip install 命令。使用 easy_install 命令:确保已安装 easy_install。运行 easy_install 命令。特别提示:Windows 上可能需要使用 –…

    2025年12月13日
    000
  • python如何输出多个数字

    Python 中输出多个数字的方法包括:使用 print() 函数,并指定分隔符。使用 f 字符串格式化字符串。使用 join() 方法连接元素。使用 for 循环逐个输出数字。 如何用 Python 输出多个数字 Python 中输出多个数字有多种方法。以下介绍几种常见的方法: 使用 print(…

    2025年12月13日
    000
  • python如何输出多个空格

    Python 中输出多个空格的方法包括:字符串复制:’ ‘ * n字符串重复:str() * n字符串格式化:format()字符串右对齐:rjust() Python 如何输出多个空格 有多种方法可以在 Python 中输出多个空格: 1. 使用 ‘ ‘ * n(字符串复制…

    2025年12月13日
    000
  • python如何输出多个变量

    Python 中输出多个变量有五种方法:直接连接字符串、使用 str.format()、使用 f-string、使用 join() 和使用 print() 函数。示例代码展示了这五种方法输出两个变量 x 和 y 的用法。 用 Python 输出多个变量 在 Python 中,可以使用多种方法输出多个…

    2025年12月13日
    000
  • python如何重复输入

    使用 while 循环重复输入,步骤如下:创建 while 循环:while True:获取用户输入:input_value = input(“请输入值:”)检查退出条件:例如,如果用户输入 “q”:if input_value == “q…

    2025年12月13日
    000
  • python如何自定义列表

    答案:Python 列表可以有多种自定义方法,包括使用方括号、列表构造函数、列表推导、zip() 函数以及 + 和 * 运算符。使用列表构造函数 list() 将可迭代对象转换为列表。使用列表推导使用简洁语法从现有序列生成新列表。使用 zip() 函数将多个序列元素组合成元组列表,然后使用 list…

    2025年12月13日
    000
  • python如何创建二维数组

    在Python中创建二维数组有两种方法:嵌套列表:使用列表中包含其他列表的结构,语法为:array = [[element11, element12, …], [element21, element22, …], …]NumPy库:导入NumPy库并使用如下语法创…

    2025年12月13日
    000
  • python如何不换行输入

    在 Python 中不换行输入的方法有:使用 sys.stdin.readline() 函数读取一行文本并自动去除换行符。在 Python 2 中使用 raw_input() 函数。使用 getpass 模块的 getpass() 函数获取敏感信息,如密码。 如何在 Python 中不换行输入 在 …

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信