数据结构编程实践20讲(Python版)—05二叉树

news2024/10/13 0:32:16

本文目录

    • 写在前面:大“树”下好乘凉
      • 定义
      • 主要术语
      • 基本特征
      • 主要应用领域:
    • 05 二叉树Binary tree
      • S1 说明
      • S2 示例
      • S3 二叉树类型
        • (1)满二叉树(Perfect Binary Tree)
        • (2)完全二叉树(Complete Binary Tree)
        • (3)二叉搜索树(Binary Search Tree)
        • (4)平衡二叉树(Balanced Binary Tree)
        • (5)斜树(Skewed Tree)
        • (6)完满二叉树(Full Binary Tree)
        • (7)堆(二叉堆)
      • S4 遍历二叉树
        • (1)深度优先遍历(DFS)
        • (2)广度优先遍历(BFS)
      • S5 遍历二叉树python代码

往期链接

01 数组 02 链表 03 栈 04 队列

写在前面:大“树”下好乘凉

定义

树(Tree)是一种非线性的层次化数据结构,由节点和连接节点的边组成。它模拟了一个倒置的树,根在顶部,分支向下延伸。

主要术语

  • 节点(Node): 树中的基本单元,包含数据和指向其他节点的链接。
  • 根节点(Root): 树的顶层节点,没有父节点。
  • 父节点(Parent): 直接连接到其下层节点的节点。
  • 子节点(Child): 直接连接到其上层节点的节点。
  • 叶节点(Leaf): 没有子节点的节点。
  • 内部节点(Internal Node): 至少有一个子节点的非叶节点。
  • 兄弟节点(Siblings): 具有相同父节点的节点。
  • 边(Edge): 连接两个节点的线。
  • 路径(Path): 从一个节点到另一个节点的节点序列。
  • 深度(Depth): 从根节点到特定节点的边的数量。
  • 高度(Height): 从节点到其最远叶子节点的最长路径上的边的数量。
  • 子树(Subtree): 由节点和其所有后代组成的树。

在这里插入图片描述

基本特征

  • 层次结构: 树形结构天然地表示层次关系。
  • 递归性: 每个子树本身也是一棵树。
  • 无环: 树中不存在环路。
  • 连通性: 任意两个节点之间有且仅有一条路径。
  • n个节点的树有n-1条边
  • 动态性: 树结构可以方便地进行插入、删除操作。

主要应用领域:

  • 文件系统: 操作系统中用于组织文件和目录。
  • 数据库索引: B树和B+树用于实现高效的数据检索。
  • 编译器设计: 抽象语法树用于表示程序的结构。
  • 网络路由: 用于IP地址查找和数据包转发。
  • 人工智能: 决策树用于分类和预测。
  • 图形渲染: 场景图和BSP树用于3D图形渲染。
  • 压缩算法: 哈夫曼树用于数据压缩。
  • 搜索引擎: Trie树用于快速字符串匹配。
  • XML/HTML解析: DOM树用于表示文档结构。
  • 生物信息学: 用于表示生物分类和进化关系。

05 二叉树Binary tree

S1 说明

二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常称为"左子节点"和"右子节点"。二叉树的主要特点包括:

  • 每个节点最多有两个子节点
  • 左子节点通常表示小于父节点的值
  • 右子节点通常表示大于或等于父节点的值
  • 可以为空(称为空树)

二叉树的一些重要概念:

  • 根节点:树的顶部节点
  • 叶节点:没有子节点的节点
  • 深度:从根到该节点的边的数量
  • 高度:从该节点到最远叶节点的边的数量

S2 示例

import matplotlib.pyplot as plt
import networkx as nx


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


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

    def insert(self, value):
        if not self.root:
            self.root = TreeNode(value)
        else:
            self._insert_recursive(self.root, value)

    def _insert_recursive(self, node, value):
        if value < node.value:
            if node.left is None:
                node.left = TreeNode(value)
            else:
                self._insert_recursive(node.left, value)
        else:
            if node.right is None:
                node.right = TreeNode(value)
            else:
                self._insert_recursive(node.right, value)

    def inorder_traversal(self):
        result = []
        self._inorder_recursive(self.root, result)
        return result

    def _inorder_recursive(self

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows环境NodeJS下载配置安装运行

Windows环境NodeJS下载配置安装运行 &#xff08;1&#xff09;下载 Node.js — Run JavaScript Everywhere 安装文件。 一路傻瓜式安装。 如果安装正常&#xff0c;输入命令可显示版本号&#xff1a; &#xff08;2&#xff09;可以查询nodejs默认的后续依赖安装包位置及缓存…

稻盛和夫认为,一个领导是否值得追随,看这几点就够了

一、真正的领导者有自信&#xff0c;但不自大&#xff0c;有坚定的信念和价值观。 稻盛和夫认为&#xff0c;领导者的真正强大之处在于他们能够坚定地做正确的事情。领导者必须具备勇气和决心&#xff0c;以及坚定的信念&#xff0c;以便在面对挑战和困难时能够坚持自己的信念…

Vert.x,Web - 静态资源/模板

静态资源 Vert.x-Web带有开箱即用的处理器(StaticHandler)&#xff0c;用于处理静态Web资源(.html, .css, .js, …)&#xff0c; 因此可以非常轻松地编写静态Web服务器。 默认静态文件目录为类路径下的webroot目录&#xff0c;对于maven的项目&#xff0c;按规范放在src/main/…

BIO与NIO学习

BIO&#xff1a;同步阻塞IO&#xff0c;客户端一个连接请求&#xff08;socket&#xff09;对应一个线程。阻塞体现在: 程序在执行I/O操作时会阻塞当前线程&#xff0c;直到I/O操作完成。在线程空闲的时候也无法释放用于别的服务只能等当前绑定的客户端的消息。 BIO的代码实现 …

郑光荣参加老年春节联欢晚会团长会议现场采访

郑光荣作为北京正明圣达叫卖团的业务团长&#xff0c;他不仅在多个春节联欢晚会中展现了 自己的才华&#xff0c;还在团长会议现场接受了采访。在2024年参加了多个电视台的 春节联欢晚会录制。 郑光荣曾经参与了包括北京广播电视台、海南卫视&#xff0c;中国国际教育电视台…

c++基础-去掉空格

#include <algorithm> #include <string> #include <cctype> // 用于std::isspace std::string removeSpaces(std::string str) {str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());return str; }int main() {string str &quo…

腾讯云视立方Flutter 相关

两台手机同时运行 Demo&#xff0c;为什么看不到彼此的画面&#xff1f; 请确保两台手机在运行 Demo 时使用的是不同的 UserID&#xff0c;TRTC 不支持同一个 UserID &#xff08;除非 SDKAppID 不同&#xff09;在两个终端同时使用。 防火墙有什么限制&#xff1f; 由于 SDK…

visual studio使用ssh连接linux虚拟机运行程序

1.vs安装linux组件 2.安装后新建项目 新建后会有一个使用指南 设置网络为桥接网卡后打开虚拟机 使用vs提升的那句话安装工具 sudo apt-get install openssh-server g gdb gdbserver 重启ssh服务 sudo service ssh restart 接着进去打开ssh端口 sudo vi /etc/ssh/sshd_config …

安装rstudio-server

主要教步骤参考https://posit.co/download/rstudio-server/ 1&#xff0c;首先是linux发行版版本要求&#xff1a;符合 2&#xff0c;预装R&#xff1a;符合 3&#xff0c;安装rstudio-server 4&#xff0c;但是发现web上8787端口打不开&#xff1a; RStudio Server 可能没有在…

不会大模型不要紧!只需5分钟!你也可以微调大模型!如何快速微调Llama3.1-8B

AI浪潮席卷全球并发展至今已有近2年的时间了&#xff0c;大模型技术作为AI发展的底座和基石&#xff0c;更是作为AI从业者必须掌握的技能。但是作为非技术人员&#xff0c;相信大家也有一颗想要训练或微调一个大模型的心&#xff0c;但是苦于技术门槛太高&#xff0c;无从下手。…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”&#xff08;或标准内置对象&#xff09;不应与 global 对象混淆。这里的“全局…

【Canvas与标牌】内凹圆角矩形排列组合标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>内凹圆角矩形Draft3排列组合标牌</title><style type"…

云轴科技ZStack邀您参加迪拜GITEX 2024,10月14日不见不散

云轴科技ZStack期待在GITEX GLOBAL 2024与您相遇&#xff0c;共同探索科技的未来。 10月14日至18日&#xff0c;ZStack将携最新的云计算解决方案与AIOS智塔平台&#xff0c;亮相全球顶尖科技盛会——GITEX GLOBAL 2024 展览会&#xff0c;展位Hall 8-C20&#xff0c;向全球观众…

Git客户端使用之TortoiseGit和Git

git客户端有两个分别是TortoiseGit和Git Git用于命令行TortoiseGit用于图形界面。无论是Git还是TortoisGit都需要生成公/私钥与github/gitlab建立加密才能使用。 一、先介绍Git的安装与使用 1、下载与安装 安装Git-2.21.0-64-bit.exe(去官网下载最新版64位的)&#xff0c;安…

阿里P8面试官推荐学习的11大专题:java面试精讲框架文档

本篇文章给大家分享一波&#xff0c;阿里P8面试官推荐学习的11大专题&#xff1a;java面试精讲框架文档&#xff0c;主要包含11大块的内容&#xff1a;spring、springcloud、netty、zookeeper、kafka、Hadoop、HBASE、Cassandra、elasticsearch、spark、flink&#xff1b;希望大…

抢先体验上海交大最新大模型Agent心理诊所!论文一作深度解读角色扮演Agent前沿进展

在当今社会的快节奏生活下&#xff0c;人们对于心理健康的关注度也在持续提升。然而&#xff0c;如今的心理健康医疗资源明显不足&#xff0c;尤其是在低收入和中等收入国家。同时&#xff0c;相关医疗资源的分布也主要集中在城市和大型机构&#xff0c;这种分配不平衡导致大量…

如何下载、安装并激活 Paragon NTFS for Mac 17,paragon ntfs for mac怎么用

Paragon NTFS for Mac是一款非常不错的Mac读写工具&#xff0c;解决了大部分Mac电脑用户无法读取移动硬盘的困扰&#xff0c;但是很多用户在购买了正版Paragon后不会激活。本篇将为各位小伙伴们讲解一下NTFS读写工具Paragon NTFS for Mac是如何进行下载、安装与激活的。 注&am…

双向广搜 Solitaire——hdu1401

目录 前言 字符数字的转换 bfs or double dfs 棋局的编号 Solitaire 问题描述 输入 输出 问题分析 判重 棋子走动逻辑 单向搜索代码 双向搜索退出条件 双向广搜代码 前言 交代一下我写这题的感受&#xff0c;被自己气笑了&#xff0c;本来以为是我字符串没弄好&#xff0c;…

JAVA——File类

目录 1.概述 2.构造方法 a.根据文件路径创建文件对象 b.根据父级路径和子级路径创建对象 c.根据File表示的路径和String表示路径进行拼接 3.常见方法 a.判断文件是否存在 b.判断文件是否为文件夹 c.判断是否为文件 d.获取文件大小 e.获取文件的绝对路径 f.获取定义…

Apache Kafka基础认知-Part1

微信公众号&#xff1a;阿俊的学习记录空间小红书&#xff1a;ArnoZhangwordpress&#xff1a;arnozhang1994博客园&#xff1a;arnozhangCSDN&#xff1a;ArnoZhang1994 Apache Kafka 是一个分布式流处理平台&#xff0c;具备以下三大核心功能&#xff1a; 记录流的发布和订…