
数据结构
文章平均质量分 79
张某某。paranoia
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
备战实习记录之【树与二叉树篇】6——二叉搜索树相关
6 二叉搜索树 6.1 二叉搜索树定义 二叉搜索树有数值,「二叉搜索树是一个有序树」。 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树 6.2 二叉搜索树典型题目 6.2.1700. 二叉搜索树中的搜索 解法一:递归解法 class Solution { public TreeNode searchBST(TreeNode root, int .原创 2021-03-31 08:57:52 · 102 阅读 · 0 评论 -
备战实习记录之【树与二叉树篇】5——二叉树的常见问题(递归+迭代 应用)
5.1 判断二叉树是否对称(101. 对称二叉树) 5.1.1 解法一:迭代解法 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(原创 2021-03-30 14:35:38 · 315 阅读 · 0 评论 -
备战实习记录之【树与二叉树篇】4——翻转二叉树
4226. 翻转二叉树 解法一:迭代实现前序遍历——栈 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, Tre.原创 2021-03-29 17:10:46 · 92 阅读 · 0 评论 -
备战实习记录之【树与二叉树篇】3——二叉树的层序遍历
3 二叉树的层序遍历 3.1102. 二叉树的层序遍历 3.2107. 二叉树的层序遍历 II 3.3199. 二叉树的右视图 3.4637. 二叉树的层平均值 3.5429. N 叉树的层序遍历 3 二叉树的层序遍历 3.1102. 二叉树的层序遍历 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。 需要借用一个辅助数据结构即队列来实现,「队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。」 「而这种层序遍历方式就是图论...原创 2021-03-29 10:02:01 · 123 阅读 · 0 评论 -
备战实习记录之【树与二叉树篇】2——二叉树的前中后序遍历
1 使用栈实现二叉树的前中后序遍历 1.1 前序遍历(144.二叉树的前序遍历) 1.1.1 解题思路 二叉树的前序遍历即先遍历根节点、再遍历左节点、最后遍历右节点。 先把每一个根节点加入栈,弹出放入遍历集合中。 找到当前结点的右节点,入栈操作。 再找到当前结点的左节点,入栈操作。 重复以上操作,直至栈为空,证明所有元素已被遍历完。 注意: 前序遍历的重点,就是先让右节点入栈、再让左节点入栈。 这样基于栈 先进后出的特点,会实现出栈顺序为:根节点——左节点——右节点。 1.1.2 J原创 2021-03-27 18:08:28 · 138 阅读 · 0 评论 -
备战实习记录之【树与二叉树篇】1
1 二叉树 解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树。 1.1满二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 1.2完全二叉树 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 1.3 二叉搜索树 前面介绍的树都没有数值,而二叉搜索树有数值的了,「二叉.转载 2021-03-27 11:11:41 · 130 阅读 · 0 评论 -
备战实习记录之堆与堆排序
1.堆 堆是一种特殊的树,只要满足下面两个条件,它就是一个堆: (1)堆是一颗完全二叉树; (2)堆中某个节点的值总是不大于(或不小于)其父节点的值。 其中,我们把根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆。 2.堆详解 2.1满二叉树 满二叉树是指所有层都达到最大节点数的二叉树。比如,下面这颗树: 2.2完全二叉树 完全二叉树是指除了最后一层其它层都达到最大节点数,且最后一层节点都靠左排列。比如,下面这颗树: 可见,其实满二叉树是一种特殊的完全二叉树。 那么,使用什么转载 2021-03-17 17:45:51 · 161 阅读 · 0 评论 -
Leecode#232.用栈实现队列+Leecode#225.用队列实现栈
Leecode#232.用栈实现队列 问题描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空,返回 true ;否则,返回 false 说明: 你只能使用标准的栈操...原创 2021-03-15 17:29:20 · 142 阅读 · 0 评论 -
备战实习记录之【字符串篇】+【哈希表篇】
三、字符串篇 1.字符串是若干字符组成的有限序列,也可以理解为是一个字符数组 2.关于库函数使用 「如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。」 「如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。」 3.字符串大小扩容 「其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。」 4.「当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章」 5.反转字符串原创 2021-03-15 10:51:15 · 173 阅读 · 2 评论 -
Leetcode#15. 三数之和 与 Leetcode# 18.四数之和 (Java解法+双指针解法)
目录 Leetcode#15.三数之和 问题描述: 解题思路: Java代码: Leetcode#18.四数之和 问题描述: 解题思路: Java代码: Leetcode#15.三数之和 问题描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:.原创 2021-03-14 22:26:38 · 195 阅读 · 0 评论 -
算法之字符串KMP算法(原理及源码)
1.KMP算法介绍: 1.主要作用:「当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。」 2.前缀表是什么? 「前缀表是用来回溯的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。」 对于字符串 aabaabaaf来说, 它的前缀(即包括第一个元素但不包括最后一个元素的所有前缀子串。)有:[a,aa,aab,aaba,aabaa,aabaa,aabaab,aabaaba,aabaabaa] 它的后缀(即包括最后一个元素.原创 2021-03-11 22:27:17 · 264 阅读 · 0 评论 -
Leecode#459. 重复的子字符串 (Java解法+KMP两种解法)
问题描述 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。 示例 2: 输入: "aba" 输出: False 示例 3: 输入: "abcabcabcabc" 输出: True 解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。) 来源:力扣(LeetCode原创 2021-03-11 22:23:26 · 240 阅读 · 0 评论 -
(剑指Offer 58 - I.)Leetcode#151. 翻转字符串里的单词(Java解法+双指针解法)
问题描述: 给定一个字符串,逐个翻转字符串中的每个单词。 说明: 无空格字符构成一个 单词 。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 示例 1: 输入:"the sky is blue" 输出:"blue is sky the" 示例 2: 输入:" hello world! " 输出:"world! hello" 解释:输入字符串可以在前面或者后面包含多余的空格,...原创 2021-03-10 21:37:36 · 170 阅读 · 0 评论 -
备战实习记录之【数组篇】+【链表篇】
一、数组篇 1.「数组是存放在连续内存空间上的相同类型数据的集合。」 2.「数组下表都是从0开始的。」 「数组内存空间的地址是连续的」 3.正是「因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。」 (「数组的元素是不能删的,只能覆盖。」) 4.「二维数据在内存中不是3*4的连续地址空间,而是四条连续的地址空间组成!」 5.二分法 「只要看到面试题里给出的数组是有序数组,都可以想一想是否可以使用二分法。」 同时题目还强调数组中无重复元素,..原创 2021-03-09 21:58:25 · 119 阅读 · 0 评论 -
Leecode#142. 环形链表 II (Java解法+环形链表解题思路)
问题描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表...原创 2021-03-09 21:45:45 · 153 阅读 · 0 评论 -
Leetcode#707. 设计链表(Java解法:一道题考察链表五个常见操作)
题目描述: 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 va...原创 2021-03-07 21:28:25 · 303 阅读 · 0 评论 -
Python数据结构之二叉树的遍历
1. 二叉树 1.1 二叉树的定义 二叉树是一种特殊的树,它具有以下特点: (1)树中每个节点最多只能有两棵树,即每个节点的度最多为2。 (2)二叉树的子树有左右之分,即左子树与右子树,次序不能颠倒。 (3)二叉树即使只有一个子树时,也要区分是左子树还是右子树。 1.2 满二叉树 满二叉树作为一种特殊的二叉树,它是指:所有的分支节点都存在左子树与右子树,并且所有的叶子节...转载 2020-02-23 22:45:25 · 594 阅读 · 0 评论