文章目录一、前言二、AVL树的概念三、AVL树结点的定义四、AVL树的框架五、AVL树的插入5.1平衡因子的更新5.2AVL树的旋转5.2.1左单旋5.2.2右单旋5.2.3先右单旋再左单旋5.2.4先左单旋再右单旋5.3AVL树插入完整代码5.4AVL树的验证六、AVL树的删除七、AVL树的性能八、结语一、前言在上一篇文章中对set、multiset、map、multimap进行了简单的介绍,在其文档介绍中发现,这几个容器都有一个共同点:其底层都是借助二叉搜索树来实现的。但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成为单支树,时间复杂度会退化成O(N
=========================================================================相关代码gitee自取:C语言学习日记:加油努力(gitee.com) =========================================================================接上期:【数据结构初阶】六、线性表中的队列(链式结构实现队列)-CSDN博客 =========================================================================
目录一.前言二.树概念及结构2.1树的概念2.2树的相关概念2.3树的表现2.4树在实际中的应用(表示文件系统的目录树结构)三.二叉树的概念及结构3.1概念3.2特殊的二叉树3.3 二叉树的性质3.4二叉树的存储结构3.4.1顺序存储3.4.2链式存储四.二叉树顺序结构及实现4.1二叉树的顺序结构4.2堆的概念及结构4.3堆的实现4.3.1堆向下调整算法(略)4.3.2堆的创建(略)4.3.3建堆时间复杂度(略)4.3.4堆的插入(略)4.3.5堆的删除(略)4.3.6堆代码的实现(详) 4.3.6.1初始化函数4.3.6.2销毁函数4.3.6.3插入函数4.3.6.4向上调整函数4.3.6.
文章目录1.二叉查找树的概念2.二叉查找树的实现🍑定义节点🍑函数接口总览🍑构造函数🍑拷贝构造🍑赋值重载🍑析构函数🍑查找操作🍅动图演示🍅非递归实现🍅递归实现🍑插入操作🍅动图演示🍅非递归实现🍅递归实现🍑删除操作🍅非递归实现🍅递归实现🍑中序遍历3.二叉查找树的性能分析1.二叉查找树的概念还记得我们之前学过的二叉树吗?二又树是树的一种特殊形式,每个节点最多有2个孩子节点,下图就是一棵典型的二叉树:那什么是二叉查找树呢?二叉查找树(BinarySearchTree),也称二叉排序树或二叉搜索树,顾名思义,是用来查找数据的,它在二叉树的基础上,增加了几个规则:如果左子树不为空,则左子树上所有节点的值均小于
文章目录二叉搜索树二叉搜索树的模拟实现构造函数拷贝构造函数赋值运算符重载函数析构函数Insert循环递归Erase循环递归Find循环递归二叉搜索树的应用K模型KV模型完整代码普通版本递归版本二叉搜索树二叉搜索树又称为二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有结点的值都小于根结点的值。若它的右子树不为空,则右子树上所有结点的值都大于根结点的值。它的左右子树也分别是二叉搜索树。二叉搜索树的模拟实现构造函数 BSTree() :_root(nullptr) { }拷贝构造函数 BSTree(constBSTreeK>&t) //BSTree(
目录树概念及结构1.1树的概念1.2树的表示编辑2.二叉树概念及结构2.1概念2.2数据结构中的二叉树:编辑2.3特殊的二叉树:编辑2.4二叉树的存储结构2.4.1顺序存储:2.4.2链式存储:二叉树的实现及大小堆排列1功能展示2定义基本结构3初始化4打印5销毁6插入7向上调整8交换两数组元素之间的值9删除10向下调整11取堆顶的元素12判断二叉树是否为空13计算该二叉树元素个数3,堆排列1建堆建堆方式1时间复杂度:O(N*log(N))建堆方式2时间复杂度:O(N)2排列数组O(N*log(N))成品展示Head.hHead.cTest.c树概念及结构1.1树的概念树是一种非线性的数据
大家好!今天我们来学习数据结构中树和二叉树的概念及结构。目录1.树概念及结构1.1树的概念1.2树的相关概念1.3树的表示 1.4树在实际中的运用2.二叉树的概念及结构2.1概念2.2现实中的二叉树2.3特殊的二叉树2.3.1满二叉树2.3.2完全二叉树2.4二叉树的性质2.5二叉树的存储结构2.5.1顺序存储2.5.1.1完全二叉树的顺序存储2.5.1.2非完全二叉树的顺序存储2.5.2链式存储3.总结1.树概念及结构1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶
一、引言二叉树在应用时,经常需要知道二叉树的深度。二叉树的深度就是二叉树的层数,即从树根算起,到最底下一层的层数是多少,即二叉树中结点的最大层次值。本文给出了计算二叉树深度的算法,包括递归算法和非递归算法。二、计算二叉树的基本方法如下图所示的二叉树,其深度是4。说到层数,大家自然会想到二叉树的层次遍历法。没错,其实我们只要一层一层的来遍历二叉树,当遍历到每一层的最右侧结点时,一层就遍历结束,因此可以考虑把每一层的最右侧结点作为每一层的标志,每当访问到该结类点时,二叉树的层数就可以增加1。现在就会遇到一个问题:如何识别每一层最右侧的结点呢?这时得回忆一下层次遍历算法,使用了队列来缓存二叉树上全部
目录一,概念二,实现分析1. 插入(1.)非递归版本 (2.)递归版本 2.打印搜索二叉树3.查找函数(1.)非递归版本(2.)递归版本4.删除函数(重难点) 易错点分析,包你学会(1.)删除目标,没有左右孩子(2.)删除目标,只有一个孩子(3.)删除目标,有两个孩子代码(1.)非递归版本 (2.)递归版本5.析构函数6.拷贝构造 三,应用 四,搜索二叉树的缺陷及优化五,代码汇总结语一,概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也
目录一,二叉树的销毁 二,二叉树系列所有源代码BTee.hBTee.cQueue.hQueue.c一,二叉树的销毁 二叉树建好了,利用完了,也该把申请的动态内存空间给释放了,那要如何释放呢?我们还是以这棵树为例,要把这棵树销毁掉,其实就是把树上的结点全部释放掉,但是呢这个释放的顺序挺讲究的,对于树,我们的思想首先就是,前序遍历,中序遍历,后序遍历,层序遍历的思想,那这棵树到底用什么思想好呢?我们先来分析一下,要释放以(1)为根结点的树就相当于释放左子树(2)和右子树(4)和自身的结点,然后呢以(2),(4)为根结点的树也是同理,层层递归下去,这不就符合后序遍历的思想吗,先左子树-->右子树--