![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构基础
三少爷的剑!
从学生手上收来的资源整理并确认是否有用,如有雷同,纯属巧合。
展开
-
另一颗树的子树(数据结构基础回顾)
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \1 2给定的树 t: 4 / \1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。示例 2:给定的树 s: 3 / \ 4 5 / \1...原创 2020-07-07 11:54:47 · 4000 阅读 · 0 评论 -
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。#include<iostr原创 2020-07-07 11:20:40 · 5820 阅读 · 0 评论 -
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3...原创 2020-07-07 06:25:10 · 3952 阅读 · 0 评论 -
二叉树的中序遍历(数据结构基础回顾)
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 /** * Definition for a binary tree node. * st...原创 2020-07-07 05:41:10 · 3949 阅读 · 0 评论 -
二叉树的后序遍历(数据结构基础回顾)
给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [3,2,1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * Definition for a binary tree node. * st...原创 2020-07-07 05:30:33 · 3974 阅读 · 0 评论 -
二叉树的前序遍历(数据结构基础回顾)
给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。遍历用递归很好解决,但原有的函数每次要求返回vector<int> ,故重现定义一个...原创 2020-07-07 05:25:47 · 4083 阅读 · 0 评论 -
相同的树(数据结构基础回顾)
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2...原创 2020-07-06 22:35:47 · 4016 阅读 · 0 评论 -
单值二叉树(数据结构基础回顾)
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/univalued-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。凡二叉树.原创 2020-07-06 21:57:12 · 3996 阅读 · 0 评论 -
二叉树的镜像(剑指offer)
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5这道题考验的是做题者对二叉树的遍历的掌握情况,属于非常简单的类型。只要对二叉树的遍历熟悉就能解出。/*原创 2020-07-04 13:07:02 · 3958 阅读 · 0 评论 -
求树的深度(剑指offer)
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。运用递归方法,很简单的解决这道问题/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: i原创 2020-07-04 11:25:39 · 4023 阅读 · 0 评论 -
二叉树的下一个节点(详解,折磨我两个小时的题,必须得给它办得明明白白的)(数据结构基础回顾)(剑指offer)
题目如下所示:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。它的数据结构如下所示:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), ...原创 2020-07-04 01:36:48 · 4141 阅读 · 0 评论 -
使用队列实现栈(数据结构基础回顾)
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操...原创 2020-07-02 00:37:19 · 4131 阅读 · 0 评论 -
给定一个只包括各种括号的字符串,判断字符串是否有效。(有效括号问题)(数据结构基础回顾)
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例 5:输入: "{[]}"输出: t...原创 2020-06-30 14:35:38 · 8208 阅读 · 0 评论 -
线性表中顺序表和链表的区别(数据结构基础回顾)(较全面)
顺序表和链表的区别:相同点: 1.都是线性表结构 2.元素逻辑存储上是连续的 3.每个元素都有唯一的前驱和唯一的后继(注意:首元素不存在前驱,尾元素不存在后继(循环链表除外))不同点: 1.底层存储空间不一样,顺序表底层存储空间是连续的,而链表则是不连续的。 2.插入和删除方式不同,顺序表任意位置进行插入和删除操作,需要搬运大量的元素,效率低,时...原创 2020-06-30 12:17:50 · 7020 阅读 · 0 评论 -
旋转链表(数据结构基础回顾)
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2-&g原创 2020-06-30 00:59:06 · 4055 阅读 · 0 评论 -
重排链表(数据结构基础回顾)
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)链接:https:原创 2020-06-30 00:39:18 · 4080 阅读 · 0 评论 -
删除链表中的节点(实现的函数只给一个参数)(数据结构回顾)
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], node = 1输出: [4,5,9]解释: 给定你链.原创 2020-06-29 23:49:12 · 4192 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点(数据结构基础回顾)
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函原创 2020-06-29 23:35:21 · 4020 阅读 · 0 评论 -
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null(数据结构基础回顾)
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos.原创 2020-06-28 10:26:22 · 4354 阅读 · 0 评论 -
给定一个链表,判断链表中是否有环(数据结构基础回顾)
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos.原创 2020-06-28 09:38:28 · 4144 阅读 · 0 评论 -
相交链表(数据结构基础回顾)
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为.原创 2020-06-28 00:37:11 · 4032 阅读 · 0 评论 -
链表分割(数据结构基础回顾)(链表)
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。定义两个链表,一个放大的,一个放小的,最后链接起来。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class P原创 2020-06-27 23:39:38 · 4029 阅读 · 0 评论 -
链表的回文结构(数据结构基础回顾)(链表)(简单易懂)
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。众所周知,如果这题把链表换成数组来检测会非常简单,这题我采用的是取巧的方法,由于题设告诉你链表长度小于等于900。那么我就定义一个长度为900的数组,既符合了空间复杂度O(1),又能把所有的节点的值装进数组中。当然有的题目没有告诉你链表的长度,你就要自己运用反转单链表和遍历来做,相对来说,比较麻烦。原创 2020-06-27 23:19:18 · 4040 阅读 · 0 评论 -
合并两个有序链表(c/c++)(数据结构基础回顾)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *原创 2020-06-27 14:22:56 · 4398 阅读 · 0 评论 -
反转链表(遍历法)(数据结构基础回顾)
反转一个单链表。我的想法是定义三个,前,中,后,节点。不断的更改节点的指向,三个节点并不断的向后移位,最终遍历完成。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Lis原创 2020-06-26 21:40:27 · 4007 阅读 · 0 评论 -
移除链表元素(C++,数据结构链表回顾)
删除链表中等于给定值val的所有节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* removeElements(ListNode* head, i...原创 2020-06-26 20:58:16 · 4350 阅读 · 0 评论 -
根据二叉树创建字符串(数据结构基础回顾,二叉树)
采用前序遍历把一个二叉树转换成由括号和整数组成的字符串/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:原创 2020-06-21 18:12:15 · 4090 阅读 · 0 评论 -
链表中倒数第k个节点(基础数据结构回顾)
输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==nullptr)原创 2020-06-20 20:50:31 · 3976 阅读 · 0 评论 -
链表的中间结点(一快一满双指针,数据结构基础回顾)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* middleNode(ListNode* head) { if(head==nullptr)...原创 2020-06-20 20:20:46 · 3968 阅读 · 0 评论 -
二叉搜索数转化为双向链表(数据结构基础回顾)
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。。使用递归和中序排列进行改变二叉树节点的左右值。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public:原创 2020-06-20 19:51:10 · 3989 阅读 · 0 评论 -
反转一个链表(复习数据结构,基础)
将一个单链表反转/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) { ListNod原创 2020-06-20 00:49:27 · 4034 阅读 · 0 评论 -
移除链表元素(数据结构,基础回顾)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* removeElements(ListNode* head, int val) { List...原创 2020-06-19 23:48:37 · 3960 阅读 · 0 评论