数据结构与算法
JiangZW187
这个作者很懒,什么都没留下…
展开
-
树常见算法题1
求中序遍历后继节点class NextNode{ int value; NextNode left; NextNode right; NextNode parent; public NextNode(int value) { this.value = value; }}public class FindNextNode { //中序遍历 将节点加到list中 public static void findAllNextNo原创 2021-04-23 19:54:40 · 137 阅读 · 0 评论 -
链表经典算法题
链表的常见算法题:解决链表的算法题通常有两种方法: 1、 借助容器(栈、数组、哈希表...) 2、 快慢指针在要求空间复杂度的情况下,我们会使用快慢指针1、 - 输入链表头节点,奇数长度返回中点,偶数长度返回上终点 - 输入链表头节点,奇数长度返回中点,偶数长度返回下终点 - 输入链表头节点,奇数长度返回中点前一个,偶数长度返回上终点 - 输入链表头节点,奇数长度返回中点前一个,偶数长度返回下终点//输入链表头节点,奇数长度返回中点,偶数长度返回上终点public stati原创 2020-11-02 12:38:00 · 261 阅读 · 0 评论 -
树3--二叉排序树
二叉排序树在线性表中,我们可以通过数组和链表对数据进行查询、添加、删除。在数组中查询的时间复杂度为O(1) , 添加删除的操作时间复杂度为O(n)在链表中查询的时间复杂度为O(n) ,添加删除的操作时间复杂度为O(1) 【且当前已找到需要删除的数据】因此我们通过二叉树来存储数据,以及与数据的一些处理。二叉排序树的定义二叉排序树(BST),又称二叉查找树、二叉搜索树。对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点比当前节点的值大。特别说明,如果有相同的值,可原创 2020-09-17 11:07:33 · 151 阅读 · 0 评论 -
树2--线索二叉树和赫夫曼树
文章目录树线索二叉树赫夫曼树树线索二叉树问题引入:在该树中,1,2,3结点的左右指针并没有全部被利用。我们希望充分利用各个结点的左右指针,让各个结点指向自己的前后结点。解决方法:线索二叉树介绍线索二叉树n个结点的二叉链表含有n+1个空指针域。利用二叉链表中的空指针域,存放指向某种遍历次序下的前驱和后继结点的指针。线索二叉树可分成前序线索二叉树,中序线索二叉树,后序线索二叉树。如何实现线索二叉树我们中序遍历树;得到的结果是:3、1、0、4、2、53 的 左右结点都为空,那么我们将原创 2020-09-10 14:29:34 · 165 阅读 · 0 评论 -
树1--二叉树的实现和遍历
文章目录树基本术语二叉树二叉树的实现二叉树的遍历树树(Tree)形结构是一种重要的非线性结构。树形结构反映了数据元素之间的层次关系和分支关系。基本术语 一个结点的子树个数称为该结点的度(degree),一棵树中结点度的最大值称为该树的度。度为0的结点称为叶子结点或者终端结点。 树中结点的后继结点称为儿子结点,结点的前趋结点称为儿子的父亲结点。 结点的层数使从根开始算起的。设根节点的层数为1,其他结点的层数等于父亲结点的层数加1. 若把树中每个结点的各子树看成从左到原创 2020-09-08 17:18:10 · 263 阅读 · 0 评论 -
栈和递归3--递归
递归算法思想 递归(Recurrence)是计算机、数学、运筹等领域经常使用的最强大的解决问题的方法之一。他用一种简单的方式来解决那些用其他方法解起来可能很复杂的问题。 递归的基本思想是把一个问题划分为一个或多个规模更小的子问题。,然后用相同的方法解规模更小的子问题。注意,这里的子问题应该与原问题保持相同类型。递归算法的设计:1、找到问题的初始条件(递归入口),即当问题规模n小到某一个值时,该问题变得简单,能够直接求解。2、设计一个策略,将一个问题划分为一个或多个一步步接近递原创 2020-09-08 13:19:05 · 264 阅读 · 0 评论 -
栈和递归2--栈的应用
文章目录栈的应用括号匹配问题进制转换简单的四则运算栈的应用括号匹配问题问题:给出一个字符串,里面有三类括号:“(,)”、 “[,]”、 ”{,}"括号成队出现并且嵌套正确,返回true ;否则返回false;示例:input:“({()})"output: trueinput:"{(]}"output: false算法:依次扫描字符串。1、如果出现左括号【 ‘(’、‘[’ 、‘{’ 】时。进栈。2、如果出现右括号【 ‘)’、‘]’ 、‘}’ 】时 2.1、若栈原创 2020-09-07 11:32:41 · 173 阅读 · 0 评论 -
栈和递归1--栈的实现
文章目录栈的特点栈的实现栈的特点栈(Stack)又称堆栈,是一种基于后进先出(LOFO)策略的集合类型。是限制在表的一端进行插入删除运算的线性表。栈可以用来在函数调用时存储断点,做递归时要用到栈。通常将能够进行插入和删除运算的这一端称为栈顶,另一端称为栈底。当表中没有元素时称为空栈。栈的常用运算:Pop():弹出操作,每次删除操作。Push():压入操作,将数据插进栈中。isFull():判断当前栈是否是空栈。isEmpty():判断当前栈是否已满。Pick():得到栈顶元素的值,但不能原创 2020-09-06 14:26:07 · 441 阅读 · 0 评论 -
队列详解2-两个队列实现栈
两个队列实现栈栈和队列相似,都是特殊的线性表。但在数据的运算方法与队列不同,栈为先进后出。队列是先进先出。算法思路:先初始化栈:初始化两个循环队列。先存入数据:按照存入队列的方式将数据存入栈中。现在取出一个数据:我们将Queue1的数据依次存入Queue2中,直到Queue1只剩一个数据,然后将最后一个数据出队列。再加入数据:在已有数据的队列中添加数据。取出数据:同样,将Queue2的数据依次存入Queue1中,直到Queue2还剩最后一个数据,然后将最后一个数据出队列。我们发原创 2020-09-01 14:43:43 · 370 阅读 · 0 评论 -
队列详解1
文章目录1、队列的定义及基本概念2、单向队列3、循环队列1、队列的定义及基本概念“队列”(Queue)这个单词时英国人说的 “排”(line)(一种等待服务的方式),在生活中,队列在我们日常生活中经常碰到,例如,排队买东西。在计算机科学中,队列是一种数据结构,是一种特殊的线性表。和栈类似。但相差很大。队的操作是在两端进行,其中一端只能进行插入,该端称为队列的队尾,而另一端只能进行删除,该端称为队列的队首。队列的运算规则时FIFO(First In First Out)队列的基本运算:置原创 2020-08-31 16:35:41 · 2369 阅读 · 0 评论