![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
在本专栏中,我将与大家分享考研数据结构的核心知识点.
好梦成真Kevin
Never ever give up.
展开
-
查找(二叉排序树)
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define Yes 1#define No 0typedef short Status;typedef short ElemType;struct BiTreeNode/* 二叉树结点定义 */{ ElemType key; struct BiTreeNode *LChild; struct BiTreeNode .原创 2021-06-19 20:42:20 · 465 阅读 · 1 评论 -
层数最深叶结点之和(输入数据是难点)
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 1000#define OK 1#define ERROR 0#define Yes 1#define No 0typedef short ElemType;typedef short Status;struct BiTreeNode/* 二叉树结点定义 */{ ElemType data; st.原创 2021-06-15 12:05:40 · 281 阅读 · 2 评论 -
按层序遍历顺序生成二叉树
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define Yes 1#define No 0typedef short ElemType;typedef short Status;struct BiTreeNode/* 二叉树结点定义 */{ ElemType data; struct BiTreeNode *LChild;/* 左孩子指针 */ struct.原创 2021-06-14 20:26:37 · 264 阅读 · 0 评论 -
二叉树最深层次元素求和(基于层序遍历算法)
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define Yes 1#define No 0typedef short ElemType;typedef short Status;struct BiTreeNode/* 二叉树结点定义 */{ ElemType data; struct BiTreeNode *LChild;/* 左孩子指针 */ str...原创 2021-06-13 17:25:14 · 285 阅读 · 0 评论 -
二叉树基本操作集合
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define Yes 1#define No 0typedef char ElemType;typedef short Status;struct BiTreeNode/* 二叉树结点定义 */{ ElemType data; struct BiTreeNode *LChild;/* 左孩子指针 */ struct .原创 2021-06-13 15:08:39 · 178 阅读 · 0 评论 -
链队列基本操作模拟系统
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0typedef short ElemType;typedef short Status;struct QNode/* 链队列的结点 */{ ElemType data; struct QNode *next;};struct QueueInfo/* 链队列的头尾指针 */{ QNode *Qfront;/* 队头指针.原创 2021-06-09 18:22:03 · 107 阅读 · 0 评论 -
顺序(循环)队列基本操作模拟系统
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 10#define OK 1#define ERROR 0#define Yes 1#define No 0typedef short ElemType;typedef short Status;struct SqQueueNode/* 循环队列的信息结点 */{ ElemType *base; short Qfront;/* 循环队列的头"指针.原创 2021-06-09 17:10:13 · 137 阅读 · 0 评论 -
链栈基本操作模拟系统
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0typedef short ElemType;typedef short Status;struct StackNode/* 链栈结点 */{ ElemType data; struct StackNode *next;};/* */Status InitStack(struct StackNode* &s);St.原创 2021-06-09 14:44:13 · 102 阅读 · 0 评论 -
顺序栈基本操作模拟系统
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 10#define OK 1#define ERROR 0typedef short SElemType;typedef short Status;struct SqStack{ SElemType *base;/* 栈底指针 */ SElemType *top; /* 栈顶指针 */ short stacksize;/* 栈可用的最大容量 .原创 2021-06-08 20:11:28 · 82 阅读 · 0 评论 -
简单算术表达式求值(可识别空格, 检测非法除0操作)
#include<stdio.h>#include<stdlib.h>struct Node/* 链栈OPTR结点 */{ char c; struct Node *next;};struct Node_OPND/* 链栈OPND结点 */{ short n; struct Node_OPND *next;};/* */void InitLinkStack(struct Node* &OPTR, struct Node_OP.原创 2021-06-08 11:08:47 · 286 阅读 · 0 评论 -
(※)中序遍历二叉树的非递归算法
在此之前,我们已经学习了中序遍历二叉树的递归算法,相信大家已经将其牢牢掌握了. 除了使用递归思想作为求解问题的钥匙,还可以借助栈来以非递归方式实现该问题的求解. 首先,我们要讨论存储二叉树结点信息的栈的形态:是只存储二叉树结点的指针,还是要完整存储二叉树结点的信息(LChild指针+数据域data+RChild指针). 在这里先和大家说明,经过程...原创 2020-05-06 17:31:32 · 4387 阅读 · 2 评论 -
普通二叉树的复制问题及对二叉树创建序列的讨论
前面已经和大家分享了一些普通二叉树的操作算法,这里再补充一个比较重要的算法(课本上出现)——普通二叉树的复制. 大家想一下,复制一棵二叉树,其实可以等价为两大操作:①复制二叉树的形态(各结点的关联关系,即指针指向关系),②复制二叉树各结点数据域中的数据. 复制二叉树的形态是本问题的关键. 我们回忆一下当初以先序序列创建二叉树的算法,再与这里的实际...原创 2020-05-06 12:27:23 · 390 阅读 · 0 评论 -
先序遍历线索二叉树
前面已经和大家介绍过"给线索二叉树加先序线索"的操作,这里我们再来讨论先序遍历线索二叉树的操作. 我们先来讨论该如何找到二叉树T中某结点的先序后继:根据先序遍历"根左右"的遍历顺序,如果该结点有左孩子,那么该结点的先序后继就是该结点的左孩子;如果该结点无左孩子且有右孩子,那么该结点的先序后继就是该结点的右孩子;如果该结点既无左孩子又无右孩子,那么该结点的先序后继为...原创 2020-05-05 10:19:39 · 4385 阅读 · 0 评论 -
(※)中序遍历线索二叉树和逆中序遍历线索二叉树
在前面的博客中, 我们已经学习了给二叉树加中序线索的方法. 接下来我们来学习中序遍历线索二叉树的方法. 首先, 我们需要找到二叉树T中第一个被中序遍历的结点: 根据中序遍历的算法逻辑, (※)也就是找到二叉树T的最左下结点. 下面的算法可定位到二叉树的最左下结点.BiTreeNode* FirstNode(BiTreeNode* T)//在以T为根的子树中,...原创 2020-05-05 09:45:38 · 2160 阅读 · 0 评论 -
(※)给线索二叉树加线索
博客更新至此,已基本完成对普通二叉树操作的学习. 下面我即将和大家分享"线索二叉树"的相关知识:还未完全掌握普通二叉树操作的朋友,建议先回过头去仔细复习,待基本掌握普通二叉树的操作后,再阅读本篇博文. 好的,下面我们开始对线索二叉树相关知识的学习. 假设一棵二叉树共有n(n≥1)个结点,那么这棵树中共有2*n=2n个指针域(每个...原创 2020-05-02 12:48:01 · 758 阅读 · 1 评论 -
交换二叉树中每个结点的左孩子和右孩子
在之前的博客中,我们已经掌握了二叉树先序遍历、中序遍历和后序遍历递归算法. 我们可以任选一种遍历序列作为本算法的基础,并在遍历结点时交换该结点的左右子树顺序即可. 在此,我选择先序遍历序列. 遍历序列的选择仅仅是"开胃菜",解决本问题的核心是"如何交换某结点的左右子树顺序":大家可以在草稿纸上画出一棵形态具有代表性(即不能过...原创 2020-05-02 11:31:24 · 17834 阅读 · 3 评论 -
用层次遍历二叉树的方法统计二叉树中度为1的结点的个数
在之前的博客中,我们已经掌握了使用辅助队列来实现二叉树层次遍历的算法. 既然是"遍历",那么二叉树中的每个结点在一次操作中都会被访问到:基于此,我们对遍历时的操作稍加修改,便可统计二叉树中度为1的结点的个数. (※)这里再说明一下判断结点度是否为1的方法:如果某结点的左孩子为空且右孩子不空或左孩子不空且右孩子为空,那么该结点的度就为1. 根据分...原创 2020-05-02 11:05:57 · 10321 阅读 · 1 评论 -
如何层次遍历二叉树(使用队列作为辅助工具)
在此之前,我们已经掌握了使用递归算法实现二叉树先序遍历、中序遍历和后序遍历的流程,这里我们加大一下难度,探讨该如何实现二叉树的层次遍历算法. 相信有朋友至此会直接回答"用递归算法解决". 我曾经也有过这种想法,可后来的实践证明,"用递归思想设计层次遍历算法"这种想法是不可行的:和之前提到的三种遍历过程不同的是,在二叉树的层次遍历过程中,对于各结点的操作并不能总结出...原创 2020-05-01 10:32:33 · 2021 阅读 · 0 评论 -
二叉树基本操作补充(求二叉树中度为0/度为1/度为2的结点个数)
在掌握了二叉树的先序遍历递归算法、中序遍历递归算法和后序遍历递归算法的实现流程后,我们稍微开拓一下视野,来看一下该如何求出二叉树中度为0、度为1和度为2的结点的个数. 在设计算法之前,我们要弄清什么是"结点的度". "结点的度"是指该结点孩子的个数:如果该结点没有孩子,那么该结点的度为0;如果该结点只有左孩子而没有右孩子或只有右孩子而没有左孩子,那么该结点的度为1...原创 2020-05-01 09:30:25 · 4757 阅读 · 1 评论 -
二叉树的基本操作(先序序列创建二叉树/先序遍历递归算法/中序遍历递归算法/后序遍历递归算法/求二叉树深度的递归算法)
二叉树的存储结构有顺序存储和链式存储两种存储方式,这里我们采用使用频率较高的链式存储方式(二叉链表)来存储二叉树. 下面给出二叉树结点的定义.struct BiTreeNode//二叉树结点定义{ BiTreeNode* LChild;//左孩子指针域 int data; BiTreeNode* RChild;//右孩子指针域}; ...原创 2020-05-01 09:14:02 · 4597 阅读 · 0 评论