数据结构复习 | 二叉树
1、树和子树(1)、什么是树在学习二叉树前非常有必要先了解一下什么是树、什么是子树并清楚什么是树形结构如下图所示的是我们日常生活中随处可见的树木。仔细观察可以发现这棵树是从一根主干开始然后向上不断分叉其中从任何一个分叉点节点开始连同它上方长出的所有更小分叉和叶片都构成这棵大树的子树。这种“大树枝干中包含小树枝干”的结构就是计算机科学中“树”这种数据结构的递归本质的生动写照。通过对比此前所学习的链表和队列这样一对一关系的线性结构满足一颗大树这样一对多的关系的就可以称之为树形结构。在计算机中树是一种非线性的分层数据结构。它由节点Node和连接节点的边Edge组成。可以把上图这颗树想象成一颗倒挂的“现实中的树”根在上枝叶在下。(2)、树的关键术语A - 根节点 / \ B C - B和C是A的子节点它们互为兄弟 / \ \ D E F - D、E、F是叶子节点没有子节点 / \ G H - G和H是E的子节点节点Node树中的每个元素如 A、B、C...。父节点Parent和子节点ChildA是B和C的父节点B和C是A的子节点。兄弟节点Sibling具有相同父节点的节点如B和C。祖先节点Ancestor从根节点到该节点路径上的所有节点对G来说A、B、E都是祖先。后代节点Descendant该节点子树中的所有节点对E来说G、H是后代。度Degree一个节点拥有的子节点数量A的度为2B的度为2C的度为1D的度为0。树的度整棵树中所有节点度的最大值上例中为2。叶子Leaf度为0的节点D、F、G、H。层Level根节点在第1层其子节点在第2层依此类推。高度Height或深度Depth树中节点的最大层数上例中高度为4。2、二叉树(1)、什么是二叉树二叉树Binary Tree 是一种树形的数据结构它的每个节点最多只有两个子节点度不大于2分别称为左子节点和右子节点。这个“最多两个”的特性是它和一般树子节点数量不限的根本区别。一个二叉树主要由以下部分组成根节点Root树的最顶层节点没有父节点。内部节点Internal Node至少有一个子节点的节点。叶子节点Leaf Node没有子节点的节点位于树的末端。子树Subtree每个节点及其所有后代节点构成的树。(2)、二叉树类型二叉树有如下几种常见的类型类型特点满二叉树每个节点要么是叶子要么有两个子节点。没有“单分支”节点。完全二叉树除了最后一层其他层节点全满且最后一层节点从左到右连续排列。堆Heap就是基于此结构。完美二叉树既是满二叉树又是完全二叉树。所有叶子节点都在同一层节点总数正好为 2^k - 1。平衡二叉树任意节点的左右子树高度差不超过1如AVL树、红黑树可保证查找效率为 O(log n)。二叉搜索树左子树所有节点值 根节点值 右子树所有节点值。支持快速查找、插入和删除。退化二叉树每个节点只有一个子节点实际上退化为链表查找效率变为 O(n)。(3)、二叉树的遍历方式遍历是访问树中所有节点的过程根据根节点的访问顺序分为三类深度优先遍历前序遍历根 → 左 → 右用途复制树结构或用于序列化。中序遍历左 → 根 → 右用途在二叉搜索树中会得到有序序列。后序遍历左 → 右 → 根用途删除树或计算目录大小先处理子项。先序、中序、后序 是针对 “根”来讲的若 “左” 和 “右”不是终端结点则会进入递归遍历但每次访问的都是“根”。另外还有层序遍历属于广度优先遍历从上到下、从左到右逐层访问通常借助队列实现。(3)、二叉树的存储方式和其它逻辑结构类似二叉树既可以使用顺序存储也可以使用链式存储。顺序存储主要用于完全二叉树如堆。按层序编号根节点索引为1则节点 i 的左子为 2i右子为 2i1父节点为 i/2。节省空间但不适合稀疏树。由于在顺序存储时数据元素之间的逻辑关系是用物理位置来表达的而二叉树中每一个节点都有一个对应的标号因此可以使用标号来作为数组的下标但除非是完美或者完全二叉树否则会浪费存储空间如下图所所示。在顺序存储中节点彼此之间的关系要用到二叉树标号的基本特性。简单观察二叉树的标号会发现如下规律根节点标号为1根节点没有父节点标号为n的节点其父节点的标号为n/2标号为n的节点其左孩子若有的标号为2n其右孩子若有的标号为2n1根据以上结论在顺序存储的二叉树中虽然没有任何信息连接节点e和f但根据他们的下标序号可以得知e是f的父节点且f是e的左孩子。链式存储每个节点包含数据域、左指针、右指针可能还有父指针。对于链式存储而言二叉树节点的设计与链表无异如下typedef struct node { datatype data; // 用户数据 struct node *lchild; // 左子树指针 struct node *rchild; // 右子树指针 }node;

相关新闻

企业级Agent实战测评:从LangChain到DSPy,四大技术路线深度横评

企业级Agent实战测评:从LangChain到DSPy,四大技术路线深度横评

1. 一场关于“标准”的无声战争:企业级Agent的现状与迷思最近在技术圈里,“企业级Agent”这个词的热度,简直比夏天的柏油马路还要烫脚。从各种技术分享会到投资机构的研报,再到各大云厂商的产品发布会,似乎不提“Agent…

2026/8/25 17:06:25 阅读更多 →
基于Codebuddy与baoyu-skills搭建开源AI副驾:自媒体工作流自动化实战

基于Codebuddy与baoyu-skills搭建开源AI副驾:自媒体工作流自动化实战

1. 从“单打独斗”到“AI副驾”:一个自媒体人的效率革命如果你和我一样,是一个人在做自媒体,那你肯定对下面这些场景深有体会:为了找一个合适的封面图,在几个图库网站之间反复横跳,浪费半小时;想…

2026/8/25 17:06:25 阅读更多 →
CCS11界面深度解析:从Project Explorer到Properties,高效嵌入式开发指南

CCS11界面深度解析:从Project Explorer到Properties,高效嵌入式开发指南

1. 项目概述:初识CCS11的界面世界如果你刚接触TI的Code Composer Studio 11(CCS11),面对这个功能强大的集成开发环境,第一感觉可能是“界面元素真多,从哪开始看起?”。这很正常,我刚…

2026/8/25 17:06:25 阅读更多 →

最新新闻

AI面试教练如何解析GitHub项目提升技术面试表现

AI面试教练如何解析GitHub项目提升技术面试表现

1. 项目概述:当GitHub项目遇上AI面试教练去年帮学弟修改简历时发现一个现象:90%的技术求职者会把GitHub项目写在简历上,但当被问到"这个项目解决了什么问题"、"你负责哪些核心模块"时,往往语焉不详。这正是我…

2026/8/25 18:33:32 阅读更多 →
Vibe Coding:构建高效自动化Python开发工作流

Vibe Coding:构建高效自动化Python开发工作流

如果你正在学习编程,或者已经是一名开发者,但总感觉自己的代码“不够好”——功能能实现,但代码结构混乱、命名随意、缺乏设计感,甚至自己过段时间都看不懂——那么,你遇到的问题,很可能不是算法或语法&…

2026/8/25 18:33:32 阅读更多 →
AI语音生成与对抗检测:七种技术路线与多层次防御体系解析

AI语音生成与对抗检测:七种技术路线与多层次防御体系解析

1. 项目概述:AI语音生成与对抗的“猫鼠游戏”最近几年,AI生成语音的技术发展速度,快得有点让人措手不及。从最初机械的TTS(文本转语音),到如今真假难辨的Deepfake语音,我们仿佛一夜之间就进入了…

2026/8/25 18:32:31 阅读更多 →
OpenRouter活动面板API升级:按智能体维度精细化追踪AI调用与成本

OpenRouter活动面板API升级:按智能体维度精细化追踪AI调用与成本

这次我们来看一个对开发者很实用的更新:OpenRouter 活动面板 API 升级,新增了按智能体(Agent)查询的功能。如果你正在使用 OpenRouter 作为大模型 API 聚合平台,或者你在开发基于 AI 智能体的应用,那么这个…

2026/8/25 18:32:31 阅读更多 →
大模型应用开发实战:从提示词工程到智能体框架的完整指南

大模型应用开发实战:从提示词工程到智能体框架的完整指南

想学大模型开发,但网上资料要么太浅、要么太散、要么直接劝退?你不是一个人。很多开发者卡在第一步:面对海量概念和框架,不知道从哪里开始,更不知道如何把“大模型”这个听起来高大上的东西,变成自己手里能…

2026/8/25 18:32:31 阅读更多 →
硬核实测——Cursor + QuantDash,3行代码直接拉取A股/美股/港股实时行情

硬核实测——Cursor + QuantDash,3行代码直接拉取A股/美股/港股实时行情

📌 摘要 / 快速解答 (Direct Answer) 针对“你的Cursor能直接拉实时行情吗?还是只会写代码不会拿数据?”这个问题——答案是:能,而且只需要3行Python代码。 通过 QuantDash Python SDK(pip install quantda…

2026/8/25 18:32:31 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →