- 博客(140)
- 收藏
- 关注
原创 【剑指 offer】二叉树层序遍历
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。创建一个队列:1.把 root 入队列,2.出一个节点,3.访问节点,4.将当前节点的左子树入队列,将当前右子树入队列(注意判断空)。依次重复 2 3 4步骤即可。
2024-08-15 23:30:00 139
原创 【剑指 offer】栈的压入、弹出序列
要判定第二个序列是否可能是该栈的弹出序列,就要使用指定的入栈顺序模拟出来对应的弹栈序列,我们设入栈顺序序列式pushV, 可能出栈序列popV,popv的第一个元素,一定是最后入栈,最先弹栈的,而我们的入栈顺序是一定的,也就决定了,我们必须一直入栈,直到碰到popv的第一个元素,然后开始弹栈,最后在循环这个过程,如果符合要求,最后栈结构一定是空的。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
2024-08-15 23:15:00 219
原创 【剑指 offer】包含min函数的栈
为了满足通用,我们使用一个辅助栈,内部保存元素的个数和数据栈完全一样,不过,辅助栈内部永远保存本次入栈的数为所有数据的最小值(注意:辅助栈内部元素可能会出现“必要性”重复)定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。题面说了,保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法,所以,后面的代码对空的检验可有可无。但是,问题是:如果想拿出第二小,第三小的值怎么拿?
2024-08-15 23:00:00 160
原创 【剑指 offer】删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5。这里要考虑特别多的特殊情况,如:全部相同,全部不相同,部分相同等,为了方便解题我们定义头结点,主要是应对全部相同的情况。通过快慢指针的方式限定范围,进而达到去重的效果。
2024-08-15 22:45:00 164
原创 【剑指 offer】镜像二叉树
仔细观察可以发现,所谓的二叉树镜像本质是自顶向下(or自底向上)进行左右子树交换的过程。操作给定的二叉树,将其变换为源二叉树的镜像。
2024-08-15 22:30:00 212
原创 【剑指 offer】树的子结构
通过递归的思路去进行比较,首先得想到,两棵树其中只要有一颗为空就是 false,然后还有特殊情况,就是都为空的情况,是同一颗二叉树,返回 true,比较的时候还得注意第一颗数的长度是大于等于第二棵树的,所以第二棵树走完了,第一棵树要么还有节点,要么也刚好走完,否则也是 false,然后一一比较他们的节点的值。假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构。输入两棵二叉树A,B,判断B是不是A的子结构。
2024-08-15 22:15:00 207
原创 【剑指 offer】合并链表
定义一个新链表,先进行我们的原俩链表判断,然后比较俩链表的每个节点大小,然后往后走,新链表按照递增的排序进行插入,最后注意,俩链表长度可能不一样,走完一个直接拼接另外一个剩下的节点。输入两个递增的链表,单个链表的长度为 n,合并这两个链表并使新链表中的节点仍然是递增排序的。
2024-08-15 22:00:00 214
原创 【剑指 offer】反转链表
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
2024-08-15 21:30:00 383
原创 【剑指 offer】倒数第 k 个节点
因为我们是要返回第 k 个节点,我们定义一个前后指针,前指针比后指针多走 k 步,走到终点的时候后指针就是倒数第 k 个节点。输入一个链表,输出该链表中倒数第k个结点。
2024-08-15 21:00:00 123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人