目录一、前言1.1树1.2树的相关概念 二、二叉树2.1定义2.2特殊类型2.3二叉树的性质2.4二叉树的存储结构(1)顺序存储(2)链式存储三、二叉树相关操作3.1创建一颗二叉树3.2二叉树的遍历(1)前序遍历/先序遍历(2)中序遍历(3)后序遍历(4)层序遍历3.3二叉树的其他操作(1)求二叉树节点个数(2)求二叉树的高度(3)求二叉树第k层节点个数(4)求二叉树叶子节点个数(5)在二叉树中查找值为x的节点(6)销毁二叉树(7)判断是否为完全二叉树四、二叉树基础OJ题练习4.1单值二叉树4.2相同的树4.3对称二叉树4.4二叉树的前序遍历4.5二叉树的中序遍历4.6二叉树的后序遍历4.7另
📷江池俊:个人主页🔥个人专栏:✅数据结构冒险记✅C语言进阶之路🌅有航道的人,再渺小也不会迷途。文章目录前言一、堆排序1.1排序思想1.2堆排序过程(图解)1.3堆排序代码(升序为例)二、TOP-K问题2.1TOP-K问题思路2.2随机生成随机数并存入文件2.3建小堆取前k个最大的数前言在学习堆排序和TOP-K问题之前,大家需要先熟悉两个算法(即向上调整和向下调整算法),这两大算法可谓是它们的核心。话不多说,我们直接上手。一、堆排序注意:当要求排序为升序,在建堆时需要建成大堆,反过来当要求降序,在建堆时就需要建成小堆。1.1排序思想堆排序是一种有效的排序算法,它的核心思想是将一个无序数组构建成一
八叉树原理八叉树(Octree)是一种用于在三维空间中进行空间分割的数据结构。它将三维空间递归地划分为八个子空间,每个子空间对应于一个八叉树节点。这种分割方式可以有效地组织和管理场景中的对象,提高检索效率,特别是在进行空间查询时。以下是八叉树的基本原理:空间划分:初始状态:整个三维空间被表示为一个根节点,该节点包含所有的对象。递归划分:根节点被递归地划分为八个子节点,每个子节点对应于父节点的一个八分之一空间。这个过程会一直持续下去,直到达到预定义的停止条件,例如节点包含的对象数量小于某个阈值或达到最小节点大小。节点结构:每个节点包含一个包围盒(BoundingBox)用于表示该节点所包含的空间
目录一、树的概念1、树的定义1)树2)空树3)子树2、结点的定义1)根结点2)叶子结点3)内部结点3、结点间关系1)孩子结点2)父结点3)兄弟结点4、树的深度5、森林的定义二、二叉树的概念1、二叉树的性质2、特殊二叉树1)斜树2)满二叉树2)完全二叉树3、二叉树的性质1)性质12)性质23)性质34)性质4三、二叉树的存储和创建1、顺序表存储1)完全二叉树2)非完全二叉树3)稀疏二叉树2、链表存储3、二叉树的创建四、二叉树的遍历1、先序遍历1)算法描述2)源码详解2、中序遍历1)算法描述2)源码详解3、后序遍历1)算法描述2)源码详解4、层序遍历1)算法描述2)源码详解5、四种遍历代码整合一、
文章目录1.二叉搜索树1.1.基本概念1.2.二叉搜索树的结点结构1.3二叉搜索树的代码实现1.4.二叉搜索树的性能2.平衡二叉树2.1平衡二叉树结点的定义2.2.平衡二叉树代码实现1.插入结点2.判断是否是平衡二叉树2.3.平衡二叉树的旋转2.4.平衡二叉树的性能博客写的代码都放在这里:gitee仓库链接1.二叉搜索树1.1.基本概念二叉搜索树又称二叉排序树,可以为空,如果不为空具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也都为二叉搜索树1.2.二叉搜索树的结点结构structTreeN
本文涉及知识点动态规划汇总图论深度游戏搜索归并排序组合LeetCoce1569将子数组重新排序得到同一个二叉搜索树的方案数给你一个数组nums表示1到n的一个排列。我们按照元素在nums中的顺序依次插入一个初始为空的二叉搜索树(BST)。请你统计将nums重新排序后,统计满足如下条件的方案数:重排后得到的二叉搜索树与nums原本数字顺序得到的二叉搜索树相同。比方说,给你nums=[2,1,3],我们得到一棵2为根,1为左孩子,3为右孩子的树。数组[2,3,1]也能得到相同的BST,但[3,2,1]会得到一棵不同的BST。请你返回重排nums后,与原数组nums得到相同二叉搜索树的方案数。由于答
目录144.二叉树的前序遍历一.TreeSize函数的实现:二. preOrderTree函数的实现:三.preorderTraversal函数的实现: 最后完整代码:94.二叉树的中序遍历: 145.二叉树的后续遍历:经过前面的二叉树的学习,现在让我们实操来练练手~如果对二叉树还不熟悉的小伙伴可以看看我的这篇博客~数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~(✧∇✧)Q_Q-CSDN博客144.二叉树的前序遍历题目描述:题目让我们返回节点值的前序遍历,让我们一起看看题目所给的代码: 函数的定义与功能:1.定义一个TreeSize函数用于计算这颗数的节点个数2.p
根据前(后)序、中序,确定二叉树,高妙的方法!!!二叉树的前中后序遍历⏩巧妙的方法!根据前序遍历和中序遍历,确定二叉树例题1例题2根据后序遍历和中序遍历,确定二叉树例题1❗例题2例题3只需动动笔画个图,秒画二叉树~~声明:本篇文章的技巧适合做选择填空题,编程还得是老路子–例题全部选自牛客–二叉树的前中后序遍历若二叉树为空,则空操作->前序遍历(preorderTravelsal):1️⃣先访问根节点;2️⃣前序遍历左子树;3️⃣前序遍历右子树。中序遍历(inorderTravelsal):1️⃣中序遍历根节点的左子树;2️⃣访问根节点然后访问根节点;3️⃣中序遍历右子树。后序遍历(postor
文章目录C/C++笔试练习选择部分(1)二分查找(2)单链表插入(3)双向链表(4)栈的输出(5)循环队列(6)二叉树的遍历(7)二叉树的性质(8)哈希表(9)稳定排序编程题day19汽水瓶查找两个字符串a,b中的最长公共子串C/C++笔试练习选择部分(1)二分查找 二分查找的时间复杂度() A.O(N*log(N)) B.O(N) C.O(log(N)) D.O(N^2) 答案:C 二分查找是一种在有序数组中查找特定元素的搜索算法。它的工作原理是将数组分为两半,比较中间元素与目标值,如果目标值与中间元素相等,则查找成功;如果目标值小于中间元素,则在左半部分数组中继续查找;如果目
文章目录C/C++笔试练习选择部分(1)双向循环链表(2)循环链表特点(3)双向链表插入(4)栈的特点(5)循环队列元素(6)层序遍历(7)二叉排序树的高(8)堆排序(9)散列表的查找长度(10)选择排序编程题day22小易的升级之路找出字符串中第一个只出现一次的字符C/C++笔试练习选择部分(1)双向循环链表 在有序双向链表中定位删除一个元素的平均时间复杂度为 A.O(1) B.O(N) C.O(logN) D.O(N*logN) 答案:B 在有序双向链表中,我们不能像在有序数组中那样使用二分查找来快速定位元素。在链表中,我们必须从头开始遍历链表,直到找到要删除的元素或到达链表