数据结构-树

article/2025/9/22 8:09:06

<Python 算法与数据结构视频教程> 学习笔记

1. 什么是树

树结构是一种包括节点(nodes)和边(edges)的拥有层级关系的一种结构

2. 树中的概念

  • 根节点(root): 树的最上层的节点,任何非空的树都有一个节点
  • 路径(path): 从起始节点到终止节点经历过的边
  • 父亲(parent):除了根节点,每个节点的上一层边连接的节点就是它的父亲(节点)
  • 孩子(children): 每个节点由边指向的下一层节点
  • 兄弟(siblings): 同一个父亲并且处在同一层的节点
  • 叶子节点(leaf node): 没有孩子的节点成为叶子节点

tree


图中根节点为T;
T到K的路径TCRK;
XC的父节点是T,BG的父节点是X,KM的父节点是R;
T的子节点是XC,C的子节点是JR, R的子节点KM;
兄弟节点如B和G、J和R、K和M、
叶节点:BZJKM

3. 二叉树

每个父节点最多只有两个子节点的树,上图的树就是二叉树。
与二叉树相关的概念:
节点深度(depth), 树的高度(height), 树的宽度(width), 树的 size


binary_tree


4.特殊结构的二叉树


perfect binary tree


full binary tree


complete binary tree


5. 二叉树的表示

在构建二叉树的时候,再次说明一下二叉树的根,节点,叶,分支等概念。
tree0


一棵树可以看成一个根节点和一系列的分支组成的结构。每一个分支又是一棵树,称之为子树。没有分支的树称为叶。
在构建一个树时,我们需要构建两部分,第一部分是根节点,第二部分是分支。在构造分支时,我们要保证每一个分支都是树的结构。所以要定义一个构造函数tree(),一个分支函数branches(),一个判断分支是否是树的函数is_tree(). 除此之外,我们还可以定义一个label()函数用于获取根节点的值,一个is_leaf()判断一个分支是不是叶节点。

定义一个树的构造函数:

>>> def tree(root_label, branches=[]):for branch in branches:assert is_tree(branch), 'branches must be trees'  # 保证每一个分支都是一个子树return [root_label] + list(branches)

定义一个函数获取根节点的值:

>>> def label(tree):return tree[0]

定义一个函数获取所有的分支:

>>> def branches(tree):return tree[1:]

定义一个is_tree()函数判断分支是否为树:
满足两个条件就是树:

  • 树的类型是list
  • 长度不为0
>>> def is_tree(tree):if type(tree) != list or len(tree) < 1:return Falsefor branch in branches(tree):if not is_tree(branch):return Falsereturn True

下面这个函数用于判断这棵树是否还有分支,也就判断他是否是叶节点:

>>> def is_leaf(tree):return not branches(tree)

一个完整的示例:

def tree(root_label, branches=[]):for branch in branches:assert is_tree(branch), 'branches must be trees'return [root_label] + list(branches)
def label(tree):return tree[0]
def branches(tree):return tree[1:]def is_tree(tree):if type(tree) != list or len(tree) < 1:return Falsefor branch in branches(tree):if not is_tree(branch):return Falsereturn Truedef is_leaf(tree):return not branches(tree)t = tree(3, [tree(1), tree(2, [tree(1), tree(1)])])
label(t)
branches(t)
label(branches(t)[1])
is_leaf(t)
is_leaf(branches(t)[0])

结果:


>>> t = tree(3, [tree(1), tree(2, [tree(1), tree(1)])])
>>> t
[3, [1], [2, [1], [1]]]
>>> label(t)
3
>>> branches(t)
[[1], [2, [1], [1]]]
>>> label(branches(t)[1])
2
>>> is_leaf(t)
False
>>> is_leaf(branches(t)[0])
True

点击可在线调试

6.二叉树的遍历

二叉树是一种递归结构,因为单独拿出来一个 subtree 子树出来,其实它还是一棵树。那可以直接用递归的方式来遍历它。但是当处理顺序不同的时候,树又分为三种遍历方式:

  • 先(根)序遍历: 先处理根,之后是左子树,然后是右子树
  • 中(根)序遍历: 先处理左子树,之后是根,最后是右子树
  • 后(根)序遍历: 先处理左子树,之后是右子树,最后是根
  • 层序遍历

tree_iteration


参考:
CS61A2018 2.3 sequence
Python 算法与数据结构视频教程


http://chatgpt.dhexx.cn/article/OSiLOhCT.shtml

相关文章

学算法先学数据结构?是否是无稽之谈?

前言 「 数据结构 」 和 「 算法 」 是密不可分的&#xff0c;两者往往是「 相辅相成 」的存在&#xff0c;所以&#xff0c;在学习 「 数据结构 」 的过程中&#xff0c;不免会遇到各种「 算法 」。  到底是先学 数据结构 &#xff0c;还是先学 算法&#xff0c;我认为不必纠…

数据结构C语言严蔚敏版(第二版)超详细笔记附带课后习题

手机目录功能受限&#xff0c;可利用下方链接跳转到各章知识点&#xff1a; 第一章绪论知识点 第二章线性表知识点 第三章栈和队列知识点 第四章串、数组和广义表知识点 第五章树和二叉树知识点 第六章图知识点 第七章查找知识点 第八章排序知识点 电脑可直接利用侧方目录或…

数据结构视频教程 -《[北大张铭 精品课程版]数据结构与算法(C++)》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《[北大张铭 精品课程版]数据结构与算法&#xff08;C&#xff09;》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 数据结构与算法是计算机专业一门相当重要的…

数据结构视频教程 -《[北风网]C#版数据结构与算法高级教程》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《[北风网]C#版数据结构与算法高级教程》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种…

数据结构视频教程 -《数据结构C++ 复旦大学》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《数据结构C 复旦大学》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 数据结构是计算机科学与技术专业、计算机信息管理与应用专业&#xff0c;电子商务等专业…

数据结构视频教程 -《[北大张铭 教学版]数据结构与算法(C++)》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《[北大张铭 教学版]数据结构与算法&#xff08;C&#xff09;》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 数据结构与算法是计算机专业一门相当重要的专业…

数据结构视频教程 -《数据结构(邓俊辉)》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《数据结构(邓俊辉)》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 数据结构是计算机专业的必修课程之一&#xff0c;也是编写高性能算法的必要前提。本视频的…

数据结构视频教程 -《浙江大学数据结构与算法徐镜春》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《浙江大学数据结构与算法徐镜春》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 数据结构与算法是计算机学科中的核心基础课程。课程的主要目标培养学生较全面…

数据结构视频教程哪个好

来源&#xff1a;我是码农&#xff0c;转载请保留出处和链接&#xff01; 本文链接&#xff1a;http://www.54manong.com/?id1207 目前&#xff0c;具我粗略不完全统计&#xff0c;网络上流传的数据结构视频教程大概有80个以上&#xff0c;这些视频我都发布到我的网站了&…

数据结构视频教程 -《新东方计算机考研数据结构强化班》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《新东方计算机考研数据结构强化班》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 本课程通过对各院校的考研真题的研究&#xff0c;紧密结合考研例题&#xf…

数据结构视频教程 -《小甲鱼全套教程之C C++数据结构系列教程》

整个视频打包下载地址&#xff1a;史上最全的数据结构视频教程系列分享之《小甲鱼全套教程之C C数据结构系列教程》&#xff0c;转载请保留出处和链接&#xff01; 更多优秀资源请访问&#xff1a;我是码农 本人看过&#xff0c;感觉蛮好&#xff0c;与一般的大学视频有较大的区…

数据结构视频教程 严蔚敏

严蔚敏老师是清华大学计算机系教授&#xff0c;长期从事数据结构教学和教材建设&#xff0c;本教程是数据结构视频教程中的经典之作&#xff0c;教程的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用&#xff1b;后半部分主要讨论查找和排序的各种实现方法及…

数据结构视频教程-绝对是史上最全的,共30个!!

史上最全的数据结构视频教程打包下载地址 本文出自出自我是码农&#xff0c;转载请注明出处&#xff0c;谢谢&#xff01; 以下数据结构视频教程是我多年收集的&#xff0c;因为在百度网盘上分享整个教程很快就会被delete&#xff0c;所以我只好花费大量功夫对单个视频进行一个…

OmniPeek7.1安装教程(流量工具)

1. 下载OmniPeek7.1版本,记得要有注册机的安装包,网上一大堆请自寻下载 2. 点击 setup.exe 启动安装程序 3. 点击 Install OmniPeek 进行安装

OmniPeek 抓包设置

捕捉filter设置 分析filter设置 filter设置参考博客 抓包工具&#xff1a; wireshark and omnipeek

关于Omnipeek遇到“试图执行的操作不受支持”问题

1、安装完Omnipeek后新建New Capture遇到“试图执行的操作不受支持” 解决办法&#xff1a;卸载11版本&#xff0c;换回7.1版本可以正常使用 问题原因:转中文替换了英文peekres.dll文件导致&#xff0c;11版本最好不要替换&#xff0c;安装时最好保留当时的peekres.dll文件备份…

win10系统omnipeek无线抓包网卡驱动由于数字签名问题安装失败解决办法

1、安装驱动注意事项 1&#xff09;win10系统数字签名问题导致安装失败问题 解决方法 关闭 secure boot 进入bios->Boot->Secure Boot->设置为 Disabled&#xff08;部分电脑在Security里设置&#xff09; 保存重启电脑 注&#xff1a; secure boot目的secure b…

用omnipeek抓取配网组包

用omnipeek工具抓取配网组播包 一、背景介绍 IOT行业的各位都知道&#xff0c;业内有两种常见的配网方式&#xff0c;smartconfig配网和ap配网&#xff0c;这两种配网方式各个厂家的具体实现各不相同&#xff0c;但是原理大同小异。具体原理网上有很多详细说明&#xff0c;可自…

WiFi 空口抓包工具 --- OmniPeek

1. 简介 wifi的连接交互&#xff0c;是在路由跟连接设备之间进行的&#xff0c;而这中间的媒介是空气&#xff0c;而如何抓取到这空中的交互过程&#xff0c;就有了Sniffer&#xff0c;而这OmniPeek就可以抓取这空中包&#xff0c;以便分析WIFI中间发生了什么情况&#xff0c;…

omnipeek flags查询

分析包时flags标记问题 在flags选项中右键