恋上数据结构与算法
文章平均质量分 54
爱上编程,爱上数据结构······
程序员阿红
博客纯属记录自己的学习过程,如果能帮上你实属荣幸,可以的话,留个关注,比心。
展开
-
10.二叉搜索树完整代码
Person类:package dataStruct.tree.binarySearchTree;public class Person { private int age; public Person(int age){ this.age = age; }// @Override// public int compareTo(Person p) {// return age - p.age;// } p原创 2022-02-10 13:24:52 · 653 阅读 · 0 评论 -
09.二叉搜索树的前驱节点和后继节点
09.二叉搜索树的前驱节点和后继节点二叉搜索树的前驱节点先了解一下前驱节点前驱节点:中序遍历时的前一个节点但如果是二叉搜索树,前驱节点就是前一个比它小的节点找前驱节点两种情况:当前节点的左子树不为空。则一直遍历左子树的右节点,直至为null。当前节点的左子树为空,则从父节点开始寻找前驱节点:如果当前节点为父节点的右子树,则父节点即为前驱节点。例:7的前驱节点为6。如果当前节点为父节点的左子树,则依次遍历父节点,直至遍历的节点为父节点的右子树为止。因为属于父节点的左原创 2022-01-20 16:06:37 · 2105 阅读 · 0 评论 -
08.判断一棵树是否为完全二叉树
判断一棵树是否为完全二叉树判断条件:如果树为空,返回false如果树不为空,开始层序遍历二叉树(用队列)如果node.left != null && node.right != null 将其node.left和node.right入队。如果node.left == null && node.right != null 返回false如果node.left != null && node.right == null或者node.left ==原创 2022-01-06 09:00:00 · 583 阅读 · 1 评论 -
07.二叉树的遍历和求其高度
(一)二叉搜索树的遍历二叉树如图先序遍历访问顺序:根节点、前序遍历左子树,前序遍历右子树7、4、2、1、3、5、9、8、11、10、12递归遍历代码:public void preorderTraversal() { preorderTraversal(root); } public void preorderTraversal(Node<E> node){ if (node == null ) return; Sys原创 2022-01-05 13:22:36 · 1714 阅读 · 0 评论 -
06.二叉搜索树(二)
06.二叉搜索树(二)Remove方法根据传入的元素删除步骤:1.根据传入的元素先找到其节点。 /** * 根据元素查找node * @param element * @return */ public Node<E> node(E element){ Node<E> node = root; while( node != null ){ int res = com原创 2022-01-19 14:28:59 · 387 阅读 · 0 评论 -
05.二叉搜索树(一)
05.二叉搜索树(一)二叉搜索树也被称为:二叉查找树、二叉排序树定义:任意一个节点的值都大于其左子树所有节点的值。任意一个节点的值都小于其右子树所有节点的值。它的左右子树也是一颗二叉排序树总结来说:比我小的往左拐,比我大的往右拐。特点:二叉搜索树存储的元素必须具备可比较性(比如int、double等)如果不是自定义类型,需要指定比较方式优点:可以大大提高搜索数据的效率二叉搜索树没有索引的概念这是为什么呢?我们不是可以按照从上到下,从左到右,进行编号原创 2021-12-31 15:28:19 · 604 阅读 · 0 评论 -
04.二叉树
1.二叉树的概念二叉树是树的一种特殊形式。二叉顾名思义,这种树的每个节点最多有2个孩子节点。注意:它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。如下图所示2.树的基本性质节点的度:子数的个数树的度:所有节点度中的最大值叶子节点:度为0的节点非叶子节点:度不为0的节点层数:根节点在第1层,跟节点的子节点在第2层,以此类推。节点的深度:从根节点到当前节点的唯一路径上的节点总数节点的高度:从当前节点到最远叶子节点的路径上的节点总数。树的深原创 2021-12-21 22:47:22 · 500 阅读 · 0 评论 -
03.手写队列源码-queue
队列队列(queue)是一种线性数据结构,队列中的元素只能先入先出(First In First Out,简称 FIFO)。队列的出口端叫作队头(front),队列的入口端叫作队尾(rear)。储存原理队列这种数据结构既可以用数组来实现,也可以用链表来实现。数组实现用数组实现时,为了入队操作的方便,把队尾位置规定为最后入队元素的下一个位置用数组实现的队列叫做顺序队列。操作入队 入队(enqueue)就是把新元素放入队列中,只允许在队尾的位置放入元素,新元素的下一个位置将会成为新的原创 2021-12-07 21:20:54 · 626 阅读 · 0 评论 -
02.手写栈源码-stack
02.栈概念栈(stack)是一种线性数据结构,栈中的元素只能先入后出(First In Last Out,简称FILO)。最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶 (top)。后进先出原则,Last In First Out , LIFO操作入栈(压栈)入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶。出栈(弹栈)出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素后一个原创 2021-12-04 16:25:17 · 137 阅读 · 0 评论 -
01.手写ArraryList(动态数组设计)
1.线性表线性表是具有n个相同类型元素的有限序列(n > 0 )[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0SmkgOxI-1637141600183)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211117171159320.png)]常见的线性表有数组链表栈队列哈希表(散列表)数组 数组是一种顺序存储的线性表,所有元素的内存地原创 2021-11-17 17:34:27 · 272 阅读 · 2 评论 -
复杂度分析
如何评判一个算法的好坏?一般从以下维度来评估算法的优劣:正确性、可读性、健壮性(对不合理输入的反应能力和处理能力)时间复杂度(time complexity):估算程序指令的执行次数(执行时间)空间复杂度(space complexity):估算所需占用的存储空间大O表示法(Big O)一般用大O表示法来描述复杂度,它表示的是数据规模 n 对应的复杂度忽略常数、系数、低阶 9 >> O(1)2n + 3 >> O(n)n 2 + 2n + 6 >>原创 2021-12-03 16:40:11 · 164 阅读 · 0 评论 -
单链表-史上最清晰的尾插法和头插法
02.单链表-史上最清晰的尾插法和头插法1.单链表链表是一系列的存储数据元素的单元,通过指针(引用)串联起来的,因此每个单元至少有两个域,一个域用于数据元素的存储,另一个域是指向其他单元的指针。单链表是链表的其中一种基本结构。一个最简单的结点结构如图所示,它是构成单链表的基本结点结构。在结点中数据域用来存储数据元素,指针域用于指向下一个具有相同结构的结点。[外链图片转存中…(img-YicPa8n5-1637647195611)]2.链表定义链表可增加任意类型数据元素,将其类Lin原创 2021-11-23 14:07:18 · 6644 阅读 · 2 评论