首页 > 其他分享 >数据结构笔记

数据结构笔记

时间:2023-03-14 14:24:31浏览次数:37  
标签:遍历 高度 笔记 二叉树 数组 数据结构 节点 左旋

数据结构笔记

二叉树遍历方式:

  • 前序遍历:打印 - 左 - 右
  • 中序遍历:左 - 打印 - 右
  • 后序遍历:左 - 右 - 打印

Pair

头文件:#include

pair<类型1,类型2>变量名;

pair<int,int> a(100,23),b;
b=make_pair(500,236);
if(a<b) cout<<a.second<<endl;//大小比较,先比较第一个再比较第二个

  • 一个节点指向多个节点,链表是特殊化的树,二叉树是最常见的树
  • 树大量使用递归,方便代码

二叉树

  • 以一定的规律将值按比根节点大或小插入树中,维持每个根节点的子节点数不多于两个

  • 用数组实现的完全二叉树,但与二叉树不同的是,堆只维持父子节点之间的大小关系,左右不关心
  • 小顶堆: 5
    \(~~~~~~~~~~\)/\(~~~~\)\
    $~\(10\)\(76 \)\(/\)~\(\\\)~\(/\)~\(\\ \)$65$~\(15\)\(80\)~~~~$86
    内存表达:5|10|76|65|15|80|86
  • 插入方式(小顶堆):先将当前数据放到最后然后依次和父节点比较,如果小于父节点,用父节点覆盖当前位置,再和父父节点比较,知道到顶部或者大于父节点
  • 输出方式(小顶堆):输出顶部数据,再从数组最后取一个数从顶部开始向下比较,取左右孩子最小的节点交换位置(覆盖),依次比较

平衡二叉树

  • 特点,高度平衡,查找快速,但维护耗时
  • 通过设置高度,从子节点向上计算,在插入过程中通过旋转维护高度
  • 插入:
    • 一般情况正常插入,更新高度,如果高度差超过一:
    • 情况一:右旋(2的右节点变成1新的左节点)
      \(~~~~~~~~~~\)①\(~~~~~~~~~~~~~~~~~~~~\)②
      \(~~~~~~~~~\)/\(~~~~~~~~~~~~~~~~~~~~~\)/\(~~~~~~~\)\
      \(~~~~~~\)②\(~~~~~~~~~~~~~~~~~~~\)③\(~~~~~~~~\)①
      \(~~~~~\)/
      \(~~\)③
    • 情况二:右左旋(先对2进行左旋,3的左节点变成2的右节点,变成情况一;再对1右旋,3的右节点变成1的左节点)
      \(~~~~~~~~~~\)①\(~~~~~~~~~~~~~~~~~~\)①\(~~~~~~~~~~~~~~~~~~\)③
      \(~~~~~~~~~\)/\(~~~~~~~~~~~~~~~~~~~~\)/\(~~~~~~~~~~~~~~~~~~~~\)/\(~~~~~~\)\
      \(~~~~~~\)②\(~~~~~~~~~~~~~~~~~~\)③\(~~~~~~~~~~~~~~~~~~\)②\(~~~~~~\)①
      \(~~~~~~~~~~\)\\(~~~~~~~~~~~~~~~~\)/
      \(~~~~~~~~~~~~\)③\(~~~~~~~~~\)②
    • 情况三,四,左旋和左右旋,对称即可
  • 删除
    • 如果左右节点都没有东西,删除,更新高度
    • 如果只有左节点或者右节点,把子节点向上提即可
    • 如果左右都有节点,找到根节点的右节点的最左子节点,覆盖根节点,改为删除用于覆盖的节点
    • 递归删除后判断高度是否超出误差,如果超出误差则左旋或右旋

寻路

深度优先(DFS)

  • 各个方向试探,优先一个方向探索,到思路回退,主要用到栈

广度优先(BFS)

  • 将当前能走到的节点全部纳入数组,再纳入下一层节点,用动态数组

A*

  • 和广度差不多,对节点赋予权值,每次从数组中找权值最小的节点向外拓展

标签:遍历,高度,笔记,二叉树,数组,数据结构,节点,左旋
From: https://www.cnblogs.com/bingcm/p/17214761.html

相关文章

  • openwrt通过USBmodem收发SMS笔记(未完成)
    1、安装包:kmod-usb-serialkmod-usb-serial-optionusb-modeswitchusbutils2、USB口的打开、关闭https://openwrt.org/docs/guide-user/hardware/usb.overviewOn:echo......
  • win11笔记本插入鼠标关闭触摸板设置
     任务栏空白处右键,选择“任务栏设置”。 找到右侧蓝牙和其他设备,点击触摸板   去掉这个勾 ......
  • GO语言学习笔记-测试篇 Study for Go ! Chapter ten- Test
    持续更新Go语言学习进度中......GO语言学习笔记-类型篇StudyforGo!Chapterone-Type-slowlydance2me-博客园(cnblogs.com)GO语言学习笔记-表达式篇Study......
  • N8 开发电路板 - 使用 和 笔记
    N8电路,N58的使用和笔记1.学习电路,官方提供的封闭电路。N58有192pin。《硬件设计指南》中有详细说明  02_N58模块电路N58引脚:3部分天线3根:ANT_MAIN、ANT_GNSS、AN......
  • P4387 洛谷做题笔记 2023313
    P4387洛谷做题笔记2023/3/13这道题的关键点在于,在入栈的同时可以完成出栈操作,这就需要在每一次压入时检测是否出栈。这道题还有一个易错点,就是在每一次询问之后,还必须......
  • 新概念2册L57笔记(分词作状语:否定)
    L57Canihelpyou,madam单词理解课文理解语法理解......
  • 数据结构学习笔记-day4
    Day4线性表的链式表示和实现:一、单链表的定义和表示:  1.单链表需要存储两部分信息,一是本身数据信息,二是下一节点的地址信息,两部分信息构成数据元素的存储映像,它包括......
  • docker安装笔记及常见问题解决
    1.yum安装gcc相关环境yum-yinstallgccyum-yinstallgcc-c++2.卸载旧版本(非必要)yumremovedocker\docker-client\docker-client-latest\doc......
  • 3.13python笔记
    1.print(str[0:-1])如上图所示,str[0:-1]为切片,意思是从前面开始截取到后面-1为止,所以输出第一个到倒数第二个的所有字符str="abcdef"print(str[0:-1])输出:abcde1232.pr......
  • Gradient-based Editing of Memory Examples for Online Task-free Continual Learnin
    摘要:在缺少明确的任务边界和任务标识的情况下,本文探索了task-freecontinuallearning(任务具有独立的数据标签空间,在训练和测试的过程中不提供任务识别符),在这个场景中需......