数据结构——第五章:树与二叉树

server/2025/3/30 2:51:22/

目录

一、(⭐⭐)

二、二叉(⭐⭐⭐)

三、线索二叉(⭐⭐⭐)

四、与森林(⭐⭐)

五、哈夫曼与并查集(⭐⭐⭐)


一、(⭐⭐)

选择题:数形结合(特殊图法,能满足所有的必须也要满足特殊图)

1、结点与的高度、深度、层次。

  • 的高度(深度):中结点的最大层数。
  • 结点的高度:以该结点为根的子的高度。
  • 结点的深度:节点所在的层次数。

2、结点和的度:

  • 结点的度:该结点的孩子个数。
  • 的度:中所有结点的最大度数。
  • 度为0的结点就是叶子节点(终端节点),度大于0为分支节点。

1、的性质:

  • 最少节点、最大深度往往涉及单支
  • 最多结点、最低深度往往涉及满
  • 适用于元素之间具有分支层次的数据。

二、二叉(⭐⭐⭐)

1、二叉的性质:

  • 结点数=所有结点度数之和+1
  • n0=1+n2(推广:n0=1 + n2 + 2*n3 + 3*n4 ....... (i-1)*ni)
  • 可为空,但图不可为空图(单支特别容易考)。

2、完全二叉

  • 最多只有一个度为1的结点,且只有左孩子(除去最后一层其余都满)
  • 若i<=n/2,则为分支结点,若大于则为叶子节点。
  • 例:若第六层有叶子节点,第七层可能也有。
  • 完全二叉一定是平衡二叉
  • 完全二叉高度为lg(n+1)(上取整)lgn+1(下取整)

3、满二叉

  • 每层都是满结点。

4、二叉排序

  • 左<根<右(同层递增)

5、平衡二叉

  • 任意结点左右子高度绝对值之差不超过1。

 1、二叉的链式存储结构:

  • 二叉链表n个结点:n+1个空链域,2n个指针域,n个数据域。
  • 二叉用三叉链表(左、右、双亲):空指针n+2,画图更直观。
  • 三叉用三叉链表:简单画图去吧,更直观。
  • 删除二叉链表所有结点并释放存储空间,后序最合适。(先删除左右孩子,再释放空间最后删除根结点)

2、二叉的遍历:

  • 后序遍历仍需要栈支持(右子紧挨根结点的点,无法指向根节点)
  • 先序遍历即给出入栈顺序,根据卡特兰数:1÷(n+1)×(2n与n的组合数)

三、线索二叉(⭐⭐⭐)

1、线索二叉

  • 二叉是一种逻辑结构线索二叉是加上线索之后的链表结构,即是一种存储结构(或物理结构)
  • 先序线索二叉找不到先序前驱,后序线索二叉找不到后序后继承。
  • ltag/rtag:0表示左孩子,1表示前驱。

四、与森林(⭐⭐)

1、与森林的对应关系:

  • 前序遍历二者相等
  • 中序遍历森林等于二叉的后序遍历
  • 后续遍历森林等于二叉的中序遍历

五、哈夫曼与并查集(⭐⭐⭐)

1、哈夫曼

  • 固定长度编码:所有字符均在叶子结点。
  • 可变长度编码(哈夫曼编码):根据频次进行映射,起到压缩编码的作用
  • 哈夫曼:左0右1,贪心策略,只有度为2和0的结点没有度为1的结点,总结点为2n-1,新建的结点为n-1。

2、并查集:

  • 通常用的双亲法表示并查集的存储结构
  • 时间复杂度O(lgn)~O(n)。(单情况下最差)

http://www.ppmy.cn/server/179591.html

相关文章

debug 笔记:llama 3.2 部署bug 之cutlassF: no kernel found to launch!

1 问题描述 按照官方的写法 import torch from transformers import pipeline import os os.environ["HF_TOKEN"] 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 model_id "meta-llama/Llama-3.2-3B"pipe pipeline("text-generation", modelmode…

26考研——栈、队列和数组_栈(3)

408答疑 文章目录 一、栈1、栈&#xff08;Stack&#xff09;的概念和特点定义术语操作特性示例直观理解栈的基本操作初始化栈判断栈是否为空入栈操作出栈操作读取栈顶元素销毁栈 栈的数学性质 2、栈的顺序存储结构顺序栈的定义栈顶指针初始化注意事项 共享栈共享栈的操作共享栈…

【CXX-Qt】4.1 extern “RustQt“

QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心&#xff0c;用于声明 Rust 类型和签名&#xff0c;使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…

快速入手-Django-rest-framework(一)

1、安装 Django REST Framework pip install djangorestframework 2、快速构建django项目基本结构&#xff0c;参考以下链接创建api模块&#xff0c;并注册应用 快速入手-Django项目创建&#xff08;一&#xff09;-CSDN博客 3、添加到 INSTALLED_APPS INSTALLED_APPS …

PostgreSQL详解

第一章&#xff1a;环境部署与基础操作 1.1 多平台安装详解 Windows环境 图形化安装 下载EnterpriseDB安装包&#xff08;含pgAdmin&#xff09; 关键配置项说明&#xff1a; # postgresql.conf优化项 max_connections 200 shared_buffers 4GB work_mem 32MB 服务管理命…

c#的.Net Framework 的console 项目找不到System.Window.Forms 引用

首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…

leetcode 20.有效括号

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; class Solution:def isValid(self, s: str) -> bool:stack []for i in s :if i in ((,{,[ ):stack.append(i)elif i in () ):# 这种情况是 栈弹出元素为空时候 &#xff0c;右半部分的括号多出来一些 比如&#x…

性能测试、负载测试、压力测试的全面解析

在软件测试领域&#xff0c;性能测试、负载测试和压力测试是评估系统稳定性和可靠性的关键手段。​它们各自关注不同的测试目标和应用场景&#xff0c;理解这些差异对于制定有效的测试策略至关重要。 本文对性能测试、负载测试和压力测试进行深入分析&#xff0c;探讨其定义、…