首页 > 编程语言 >C++U5-08-二叉树1

C++U5-08-二叉树1

时间:2023-12-04 14:47:30浏览次数:35  
标签:存储 U5 08 int 查找 二叉树 数据结构 id

上节课作业分析讲解视频

链接:https://pan.baidu.com/s/1_jaM_TlZmLJX4JbLuJtKzA?pwd=2us4
提取码:2us4

学习目标

 

 树

在C++中,二叉树是一种常用的数据结构,由节点(Node)组成,每个节点可以有最多两个子节点。二叉树具有以下几个主要的作用:

  1. 存储和组织数据:二叉树可用于存储和组织大量的数据。通过使用适当的插入和删除操作,可以轻松地在二叉树中添加、查找和删除数据项。二叉树的结构使得数据可以按照特定的排序方式进行存储和访问,提高了数据的查找效率。

  2. 快速的插入和删除操作:相对于其他数据结构,如数组或链表,二叉树的插入和删除操作具有更高的效率。对于已经排好序的数据,二叉树可以在O(logn)的时间复杂度内执行插入和删除操作,这使得二叉树在需要频繁插入和删除数据的场景中非常有用。

  3. 快速的搜索和查找操作:二叉树的结构允许高效地进行搜索和查找操作。通过比较节点值并按照特定的规则遍历树,可以快速地找到目标数据项。对于大型数据集,二叉树可以在O(logn)的时间复杂度内执行搜索和查找操作,极大地提高了查找效率。

  4. 构建其他数据结构:二叉树是许多其他常见数据结构的基础。例如,平衡二叉搜索树(如AVL树和红黑树)、堆、哈夫曼树等都是基于二叉树的扩展或变种。这些数据结构在各种算法和应用中起着重要的作用,如排序、优先队列、编码压缩等。

  5. 图的表示:二叉树可以看作是一种特殊的有向图。在某些情况下,二叉树可用于表示和处理图形结构,如最小生成树算法(如Prim和Kruskal算法)和图搜索算法(如深度优先搜索和广度优先搜索)。

总之,C++中的二叉树提供了一种灵活和高效的数据结构,用于存储和组织数据,并支持快速的插入、删除、搜索和查找操作。无论是作为独立的数据结构还是作为其他数据结构的基础,二叉树都具有广泛的应用场景,并在算法设计和程序开发中发挥着重要的作用。

 

 树的度

 前驱后继

 树的高度

 选择题

树的存储 

双亲表示法

 孩子表示法

[【二叉树】父亲表示法]

【算法分析】
用数组存储每个结点的父节点编号,从 id 结点不断向上移动即可。

【参考代码】
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 9;
int fa[maxn];
int main() {
    int n;
    cin >> n;
    for (int i = 2; i <= n; i++) {
        cin >> fa[i];
    }
    int id;
    cin >> id;
    while (id) {
        cout << id << " ";
        id = fa[id];
    }
    return 0;
}
View Code

 

 

 二叉树

 性质1

 性质2

 性质3

 选择题

 完全二叉树与满二叉树

满二叉树

 完全二叉树

 性质4

 性质5

 练习1

 练习2

 练习3

 叶子结点

 练习5

 练习

 

【二叉树】数组存储]

【算法分析】
考察二叉树的数组存储,输出 −1 就是结点下标超出了数组的范围 1∼n。

【参考代码】
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 9;
int a[maxn];
int main() {
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; i++) cin >> a[i];
    while (q--) {
        int id;
        cin >> id;
        if (id / 2 >= 1) cout << a[id / 2] << " ";
        else cout << -1 << " ";
        if (id * 2 <= n) cout << a[id * 2] << " ";
        else cout << -1 << ' ';
        if (id * 2 + 1 <= n) cout << a[id * 2 + 1] << "\n";
        else cout << -1 << "\n";
    }
    return 0;
}
View Code

 

 

本节课作业分析讲解

链接:https://pan.baidu.com/s/1EXsz0RL7SpsK-MQRSHPAaw?pwd=y2jt
提取码:y2jt

 

标签:存储,U5,08,int,查找,二叉树,数据结构,id
From: https://www.cnblogs.com/jayxuan/p/17874847.html

相关文章

  • SUB7080支架顶升气缸的调整方法
    支架顶升不到位的后果1.预穿销容易卡因为孔位不对中,预穿销难度增大,卡住的概率上升。 2.穿销后支架歪斜,打螺丝易错牙顶不到位的话,支架偏低,如果预穿销过程中左半边被硬生生提上去,那支架整体就是左高右低的状态。这种状态很容易导致螺丝降下拧入的时候错牙,堵转甚至将支架打开......
  • 记Redux下载后,运行examples/todos时,报错Error: error:0308010C:digital envelope rout
    1、Redux下载下载地址gitclonehttps://github.com/reactjs/redux.git进入examples/todos,下载依赖:npminstall2、问题复现及解决执行命令npmrunstart此时终端报错:Error:error:0308010C:digitalenveloperoutines::unsupported解决方法:打开package.json,修改......
  • #2023-2024-1 20231408《计算机基础与程序设计》第十周学习总结
    作业信息这个作业属于哪个课程<2023-2024-1-计算机基础与程序设计>这个作业要求在哪里<2023-2024-1计算机基础与程序设计第十周作业>这个作业的目标<《计算机科学概论》第十二,十三章,第十四章,《C语言程序设计》第九章,上周测试题>作业正文https://www.cnblogs.c......
  • OUC软件工程08小组团队项目-Alpha冲刺-3/3
    在本周的时间里,我们继续完善了代码,调试了SAR图像检测算法的参数,训练了一些模型。对于网站,我们继续使用html5以及css完善了web页面,并且编写了api接口用以调用SAR的后端。在实现接口的过程中,出现了一些困难,还需要学习更多关于接口实现的知识。在接下来几周的时间内,我们需要尽快实现......
  • Codeforces Round 908 (Div. 2)
    总结T1题目大意:A,B两人玩游戏,游戏规则如下:整场游戏有多轮,每轮游戏先胜\(X\)局的人获胜,每场游戏先胜\(Y\)局的人获胜。你在场边观看了比赛,但是你忘记了\(x\)和\(y\),只记得总共比了\(1\len\le20\)局,和每局获胜的人,请判断谁获胜了。如果A获胜,输出A,如果B获胜,输......
  • 2023-2024-1 20232408 《网络空间安全导论》第四周学习总结
    2023-2024-120232408《网络空间安全导论》第四周学习总结教材学习内容总结这一章的题目为系统安全基础。高中时学过哲学,了解过系统是由各个相互联系、相互影响的要素所构成,而且整体性、有序性、内部结构的优化性是其基本特征。而研究系统安全,有一个方面必须是由整体的视角去研......
  • 08.adb命令介绍
    1.adb简介AndroidDebugBridge(Android调试桥)简称adbAndroidsdk中提供的用于管理模拟器或真机状态的工具命令行工具2.adb操作手机设备打开应用adbshellamstart-ncom.tencent.wework/.launch.LaunchSplashActivity传输文件点击,输入,滑动等硬件操作返回,回......
  • Linux命令(108)之dirname
    linux命令之dirname1.dirname介绍linux命令dirname是用来获取文件的指定路径2.dirname用法dirname[参数]NAMEdirname参数参数说明-z使用NUL而不是换行符分隔输出--help查看帮助信息--version查看版本信息3.实例3.1.获取文件的指定路径命令:dirnameztj.txtORdirname/root/z......
  • # 2023-2024-1 20231308 《计算机基础与程序设计》第十周学习总结
    2023-2024-120231308《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周作业这个作业的目标信息系统、数据库与SQL、人工智能与专家系统、人工神经......
  • 二叉树
    二叉树分析二叉树的前序,中序,后序的遍历步骤1.创建一颗二叉树2前序遍历2.1先输出当前节点初始的时候是root节点2.2如果左子节点不为空则递归继续前序遍历2.3如果右子节点不为空,则递归继续前序遍历3.中序遍历3.1如果当前节点的左子节点不为空,则递归中序遍历3.2输出当前......