![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 70
Maestro_T
这个作者很懒,什么都没留下…
展开
-
leetcode刷题笔记(三)
第101题,给定一个二叉树,检查它是否是镜像对称的。递归法:根据题目的描述,镜像对称,就是左右两边相等,也就是左子树和右子树是相当的。注意这句话,左子树和右子相等,也就是说要递归的比较左子树和右子树。我们将根节点的左子树记做 left,右子树记做 right。比较 left 是否等于 right,不等的话直接返回就可以了。如果相当,比较 left 的左节点和 right 的右节点,再比较 left 的右节点和 right 的左节点。因此递归函数应当传入两个参数,即两个相等的结点各自的左节点和右节原创 2020-07-01 18:36:26 · 129 阅读 · 0 评论 -
leetcode刷题笔记(二)
接上篇,先来看106题,此题与105题类似,是通过中序和后序遍历结果复原二叉树。还是选择递归的方法:首先看题目函数的参数:struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize)中序的首结点和结点数,后序的首结点和结点数。那么第一步就是判空,通过结点数进行判断。其次,根结点的位置是后序遍历的最后一个,先对根结点进行赋值,然后找到根结点在中序遍历中的位置。对于根结点在中原创 2020-06-21 23:20:50 · 119 阅读 · 0 评论 -
leetcode刷题笔记(一)
首先要明确的是,数据结构是工具,算法是通过合适的工具解决特定问题的方法。二叉树是最容易培养框架思维的,而且大部分算法技巧,本质上都是树的遍历问题。二叉树问题基本框架:void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍...原创 2020-06-17 23:33:57 · 172 阅读 · 0 评论 -
BFS&DFS的改写
由于在复习数据结构的考试中见到过将中序遍历的递归形式改写为非递归形式的题目,我自己又试着改写了图中的两个经典的遍历算法非递归实现DFSvoid DFS(Graph *g,int v){ arcnode *p;//边链表头指针 int visited[g.Vnum],stack[g.Vnum],top=-1; for(int i=0;i<g.Vnum;i++) { visit...原创 2019-01-10 20:04:39 · 284 阅读 · 0 评论 -
散列表
散列表的概念散列法又称哈希法,它在元素的存储位置与元素关键码间建立一个确定的对应函数关系Hash(),使每个关键码与结构中的一个唯一的存储位置相对应:Address=Hash(Rec.key)插入时,按照此函数计算存储位置并存放,查找时对元素的关键码进行相应的函数计算,把求得的函数值与关键码进行比对,一致则查找成功。按照此方法构造的表结构即为散列表常见的散列函数(1)直接定址法对关键码...原创 2018-12-12 21:09:00 · 1402 阅读 · 0 评论 -
图的基本概念
图的基本概念图 G 是由两个集合:顶点集 V(G) 和边集 E(G) 组成的,记作G=( V(G),E(G) ),简称G=(V,E)。V是顶点的有穷非空集合E是两个顶点之间的关系,即边的有穷集合在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。不同结构中逻辑关系的对比在线性结构中,数据元素之间仅具有线性关系;在...原创 2018-12-02 18:05:52 · 205 阅读 · 0 评论 -
线索二叉树基础知识
相关概念采用某种方法遍历二叉树的结果是一个结点的线性序列。修改空链域改为存放指向结点的前驱和后继结点的地址。线索:将二叉链表中的空指针域指向“前驱结点”和“后继结点”的指针被称为线索(thread);线索化:使二叉链表中结点的空链域存放其前驱或后继信息的过程称为线索化。线索二叉树:加上线索的二叉树称为线索二叉树。显然线索二叉树与采用的遍历方法相关,有先序线索二叉树、中序线索二叉树和后序...原创 2018-11-17 17:31:59 · 1473 阅读 · 0 评论 -
二叉树的遍历应用2
递归算法删除二叉树所有叶结点若二叉树为空,返回NULL;若二叉树只有一个结点,直接删除;否则递归左右子树。void Del(BiTNode *&t){ if(t==NULL) return; if(t->lcild==NULL&&t->rchild==NULL) { delete t; t=NULL; } else { Del(...原创 2018-11-17 17:08:21 · 210 阅读 · 0 评论 -
二叉树的遍历应用1
二叉树的遍历是指按某种顺序访问树中的每个结点。由于二叉树具有递归的性质,一棵非空的二叉树可以看成是由根结点、左子树和右子树三部分组成,依次遍历这3个部分的信息,也就遍历了二叉树。完全二叉树的顺序存储转链式存储一颗完全二叉树存放在于一个一维数组T【n】中,从T【0】开始顺序读出各个结点的值,建立该二叉树的链表表示由于一维数组从0号开始存放,所以结点i的左子女为2i+1,右子女为2i+2。vo...原创 2018-11-12 19:41:39 · 447 阅读 · 0 评论 -
遍历二叉树和线索二叉树
中序线索二叉树实现代码如下#include <iostream>#include <stdlib.h>#include <stack>#include <cstring>#include <cstdio>using namespace std;enum PointerTag{Link, Thread};//指针标志,Li...原创 2018-11-18 22:36:25 · 206 阅读 · 0 评论 -
树的基本概念
树的基本概念1.树的定义树是n(n≥0)个结点的有限集合,当n=0时,称为空树;在任意一棵非空树中:(1)有且仅有一个称为根的结点。(2)其余结点可分为若干个互不相交的集合,而且这些集合中的每一集合本身又都是一棵树,称为根的子树。2.树的基本术语(1)父结点、子女结点、兄弟结点、祖先与子孙结点。(2)结点的度、叶结点、根结点、分支结点。(3)结点的深度和高度,树的深度和高度。(4...原创 2018-11-06 22:40:36 · 652 阅读 · 0 评论