JZ8二叉树的下一个结点描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。示例:输入:{8,6,10,5,7,9,11},8返回:9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9具体做法:step1:首先先根据当前给出的结点找到根节点step2:然后根节点调用中序遍历step3:将中序遍历结果存储下来step4:最终拿当前结点匹配是否有符合要求的下一个结点代码
JZ23链表中环的入口结点描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。解析环很大在前面我们提到过快慢指针,判断是否有环。如果有环,在来找环的入口。如果没环直接返回null即可,我们假设是有环的,那么会有两种情况,一种是O型,一种是6型,其实原理都一样,这里主要看一下6字型的环,他会有两种情况,如果有环,那么快指针走过的路径就是图中a+b+c+b,慢指针走过的路径就是图中a+b,因为在相同的时间内,快指针走过的路径是慢指针的2倍,所以这里有a+b+c+b=2*(a+b),整理得到a=c在相遇的时候再使用两个指针,一个从链表起始点开始,一个从相遇点开始,每
JZ23链表中环的入口结点描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。解析环很大在前面我们提到过快慢指针,判断是否有环。如果有环,在来找环的入口。如果没环直接返回null即可,我们假设是有环的,那么会有两种情况,一种是O型,一种是6型,其实原理都一样,这里主要看一下6字型的环,他会有两种情况,如果有环,那么快指针走过的路径就是图中a+b+c+b,慢指针走过的路径就是图中a+b,因为在相同的时间内,快指针走过的路径是慢指针的2倍,所以这里有a+b+c+b=2*(a+b),整理得到a=c在相遇的时候再使用两个指针,一个从链表起始点开始,一个从相遇点开始,每
JZ76删除链表中重复的结点题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5方法1哈希表进行删除思路算法实现LinkedHashMap实现顺序插入,不过查询速度会比较慢具体做法:step1:用哈希表统计每个字符的次数。step2:在put前进行判断,如果有值则在原有的值进行+1,没有则默认值+1。step3:对map进行遍历,对计数为1的值进行创建ListNode对象,然后拼接成一个链表。代码packagemid.JZ76删除链表中重复的结点;importjava.util
JZ76删除链表中重复的结点题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5方法1哈希表进行删除思路算法实现LinkedHashMap实现顺序插入,不过查询速度会比较慢具体做法:step1:用哈希表统计每个字符的次数。step2:在put前进行判断,如果有值则在原有的值进行+1,没有则默认值+1。step3:对map进行遍历,对计数为1的值进行创建ListNode对象,然后拼接成一个链表。代码packagemid.JZ76删除链表中重复的结点;importjava.util
JZ76删除链表中重复的结点题目给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如,给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]方法非递归层次遍历思路算法实现按照层次遍历按层打印二叉树的方式,每层分开打印,然后对于每一层利用flag标记,第一层为false,之后每到一层取反一次,如果该层的flag为true,则记录的数组整个反转即可。具体做法:step1:首先判断二叉树是否为空,空树没有打印结果。step2:建立辅助队列,根节点首先进入队列。不管层次怎么访问,根节点一定是第一个,那它
JZ76删除链表中重复的结点题目给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如,给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]方法非递归层次遍历思路算法实现按照层次遍历按层打印二叉树的方式,每层分开打印,然后对于每一层利用flag标记,第一层为false,之后每到一层取反一次,如果该层的flag为true,则记录的数组整个反转即可。具体做法:step1:首先判断二叉树是否为空,空树没有打印结果。step2:建立辅助队列,根节点首先进入队列。不管层次怎么访问,根节点一定是第一个,那它
CSDN话题挑战赛第2期参赛话题:学习笔记 前言为分清带结点与不带头结点的单链表操作,本文以图文和表格形式描述了两者之间的区别。考研中,数据结构的单链表操作是重要考点,其中,比较常考带头结点的链表操作。所以,本文只描述了带头结点的插入、删除、查找、用前插法和后插法创建单链表等基本操作。可结合以下链接一起学习:【考研】数据结构考点——直接插入排序_住在阳光的心里的博客-CSDN博客【考研】单链表相关算法(从基础到真题)_住在阳光的心里的博客-CSDN博客一、区别//单链表的存储结构typedefstructLNode{ElemTypedata;//结点的数据域structLNode*next;/
CSDN话题挑战赛第2期参赛话题:学习笔记 前言为分清带结点与不带头结点的单链表操作,本文以图文和表格形式描述了两者之间的区别。考研中,数据结构的单链表操作是重要考点,其中,比较常考带头结点的链表操作。所以,本文只描述了带头结点的插入、删除、查找、用前插法和后插法创建单链表等基本操作。可结合以下链接一起学习:【考研】数据结构考点——直接插入排序_住在阳光的心里的博客-CSDN博客【考研】单链表相关算法(从基础到真题)_住在阳光的心里的博客-CSDN博客一、区别//单链表的存储结构typedefstructLNode{ElemTypedata;//结点的数据域structLNode*next;/
寻找链表的中间结点题目给定一个单链表L,请编写程序输出L中间结点保存的数据。如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7;给定L为1→2→3→4,则输出应该为3。输入每个输入包含11个测试用例。每个测试用例第11行给出链表首结点的地址、结点总个数正整数N(N≤105)。结点的地址是55位非负整数,NULL地址用−1表示。接下来有N行,每行格式为:AddressDataNext其中Address是结点地址,Data是该结点保存的整数数据(0≤Data≤108),Next是下一结点的地址。输出对每个测试用例,在一行中输出L中间结点保存的数据。如果有两