随笔分类 -  数据结构与算法

二叉树的最小深度
摘要:所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。 反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。 1 int minshendu(Node* node) { 2 if (node == nul 阅读全文
posted @ 2023-08-03 12:11 小凉拖 阅读(19) 评论(0) 推荐(0)
求二叉树的最大深度
摘要:此为有返回值的递归问题 先确定终止条件(如果一个树为空树,它的高度就是0,我们直接返回0,根本不用递归) 写出通式(1+max(左子树的最大深度,右子树的最大深度)规模更小的子问题),将通式写在return里面 1 int maxshendu(Node* node) { 2 if (node == 阅读全文
posted @ 2023-08-03 11:47 小凉拖 阅读(23) 评论(0) 推荐(0)
对称二叉树
摘要:1 bool compare(Node* left, Node* right) { 2 if (left == NULL && right != NULL) return false; 3 else if (left != NULL && right == NULL) return false; 4 阅读全文
posted @ 2023-08-02 17:29 小凉拖 阅读(10) 评论(0) 推荐(0)
翻转二叉树
摘要:层序遍历: 思路:使用层序遍历的方法:将根节点入队,然后将根节点的左节点和右节点交换,每次for循环都执行“如果左节点不为空则将左节点入队,如果右节点不为空就将右节点入队,队头出队,将队头的左右结点交换,然后队头的左右节点不为空,将队头的左右结点入队。 1 void ceng(Node* node, 阅读全文
posted @ 2023-08-02 17:28 小凉拖 阅读(17) 评论(0) 推荐(0)
二叉树遍历
摘要:递归实现: 前序遍历 然后对左子树进行先序遍历,再对右子树进行先序遍历,在这些操作之前先将根节点装进容器中 1 void frontfind(Node* node, vector<int>& vec) { 2 if (node == nullptr) { 3 return; 4 } 5 //非终止条 阅读全文
posted @ 2023-08-02 15:01 小凉拖 阅读(36) 评论(0) 推荐(0)
栈和队列
摘要:栈:先进后出(子弹压樘),栈顶插入,栈顶删除,常见的应用是递归调用的实现 队列:先进先出(做核酸),队尾插入,队头删除 栈和队列顺序存储更为常见 栈 栈是向低地址增长的 不能遍历栈,因为只允许访问栈顶元素 每入栈一个元素栈的计数器就加1,因此可以求出栈的长度 栈的常用函数 如果a和b紧挨着,b一定在 阅读全文
posted @ 2023-07-30 21:27 小凉拖 阅读(31) 评论(0) 推荐(0)
树与二叉树
摘要:树的概念: 根有子节点,子节点又是一个子树的根 T1,T2,T3换一个顺序就不是原来的树了,就称为有序树,T1,T2,T3换一个顺序就还是原来的树,就称为无序树 二叉树不是树的特殊情况,二叉树中的一个结点必须表明该结点是左节点还是右节点,即便它没有兄弟结点。而树不必区分左右。 二叉树的性质 每层最少 阅读全文
posted @ 2023-07-29 20:40 小凉拖 阅读(28) 评论(0) 推荐(0)
循环链表
摘要:单链表VS循环链表 阅读全文
posted @ 2023-06-23 11:14 小凉拖 阅读(14) 评论(0) 推荐(0)
单链表程序(模板实现)
摘要:本程序无法实现的功能就是想要头结点的数据域和其他结点的数据域类型不同,由于使用模板如果在构造函数的时候设置头结点的数据域类型,那么实例化的时候(LinkList<int>link;)其他结点数据域也要跟着变成整型,如果将头结点在构造函数中提前定义好(ListNode<int>*L=new ListN 阅读全文
posted @ 2023-06-21 19:46 小凉拖 阅读(39) 评论(0) 推荐(0)
单链表
摘要:结构体 结构体的首地址即为结构体第一个成员的地址,如果结构体的第一个成员是数组,则结构体的地址也是数组中第一个成员的地址 链表的基础知识 顺序表(比如说数组)各元素的地址是连续的。 数组存储在栈区,而链表存储在堆区。 图中指针也称为链,指针的类型就是结构体的名字,比如结构体的名字是student那么 阅读全文
posted @ 2023-06-14 09:17 小凉拖 阅读(37) 评论(0) 推荐(0)