![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DS
文章平均质量分 80
sysu_arui
这个作者很懒,什么都没留下…
展开
-
二叉树的基本操作
二叉树作为一种非常重要的数据结构,今天对其做简单的回顾1、二叉树的定义typedef char ElementType;typedef struct BiTreeNode{ ElementType data; struct BiTreeNode* lchild; struct BiTreeNode* rchild;}BiTreeNode, *BiTree;2、原创 2012-08-14 17:22:00 · 29403 阅读 · 3 评论 -
图的广度优先搜索(Breadth First Search)
基本思想:首先访问初始点v,之后依次访问v的各个未成访问过的邻接点,然后分别从这些邻接点出发依次访问他们的邻接点,直至图中所有已被访问的顶点的邻接点都被访问到。图的广度优先遍历类似于树的按层次遍历的过程,要用到数据结构队列,下面直接给出实现代码。#include #include #include #include "graph.h"templatevoid BFS(c原创 2012-09-14 18:42:28 · 723 阅读 · 0 评论 -
图的深度优先搜索(Depth First Search)
算法思想:访问给定的起始点v,从v出发,访问它的一个不曾被访问过的邻接顶点w1;再从w1出发,访问w1的一个不曾被访问过的邻接顶点w2;…,如此下去,直至到达了一个顶点,它没有未访问的邻接顶点为止。退回一步到上一个被访问的顶点,看它是否还有未被访问的邻接顶点。若有,则访问该邻接顶点,且从它出发,进行前述的类似访问。若没有,则再退回一步进行搜索。当所有顶点均被访问,则过程终止。注意我们下面给原创 2012-09-13 19:18:44 · 5351 阅读 · 0 评论 -
图的邻接表实现
前面给出了图的邻接矩阵的实现,现在给出图的邻接表的实现。这里仍然采用vector来存储顶点表,顶点的插入比较简单,顶点和边的删除以及边的插入,实质上就是一系列的简单链表操作,下面直接给出代码,代码中有详细的注释。代码以有向带权图为例,对于无向图,非权图,代码只需作简单修改。1、Graph的实现#ifndef _GRAPH_H_#define _GRAPH_H_#include#原创 2012-09-13 18:59:47 · 1321 阅读 · 0 评论 -
图的邻接矩阵表示
一、基本概念1、图的定义图G由两个集合顶点集V和边集E组成,记为G = (V , E)2、邻接矩阵(1)表示顶点之间相邻关系的矩阵叫邻接矩阵。具有n个顶点的图G=(V,E)是具有下列性质的n阶方阵:A[i][j]=1,若(vi,vj)或是E(G)中的边;A[i][j]=0,若(vi,vj)或不是E(G)中的边;(2)若G是网络,则邻接矩阵可定义为:A[i][j]=w原创 2012-09-06 10:34:19 · 1579 阅读 · 0 评论 -
平衡二叉树(AVL)的插入和删除详解(下)
平衡二叉树(AVL)的插入和删除详解(上):http://blog.csdn.net/sysu_arui/article/details/78970171、测试代码为减小篇幅,只给出了主程序,其他函数模块请看(上)中的描述。#include #include #include using namespace std;int main(int argc, char *ar原创 2012-08-25 10:20:04 · 4621 阅读 · 1 评论 -
二叉查找树的C++实现
二叉查找树的插入和删除详解请看:http://blog.csdn.net/sysu_arui/article/details/7865864前面详细讲解了二叉查找树插入和删除,现在给出完整的C++实现,代码如下:#include #include using namespace std;template class BinarySearchTree{ public: B原创 2012-08-21 18:11:43 · 2932 阅读 · 0 评论 -
二叉查找树的插入和删除详解
二叉查找树是如下定义的:(1) 左子树不空,则左子树上的所有结点的值均小于根结点的值(2) 右子树不空,则右子树上的所有结点的值均大于根结点的值二叉查找树可以为空,二叉查找树是递归定义的,也就是说其左右子树也为二叉查找树。二叉查找树是一种动态查找表,可以进行动态地插入和删除。前面的定义中我们假定二叉查找树不含有相同元素。由定义可知二叉查找树的中序序列为一个递增序列常见的原创 2012-08-14 17:09:20 · 19414 阅读 · 3 评论 -
伸展树(splay tree)实现
前面讲解了平衡二叉查找树,注意到一个结点被访问后,接下来很有可能被再次访问,所以可以采取把最近访问的结点上移(比如说移动到根结点),方便以下访问。这次要讲解的伸展树就是来解决该问题的。伸展树又称自适应查找树,它的各种操作平均复杂度为O(lgn),其复杂度边界是均摊的。虽然某次操作可能需要代价O(n),但是连续M次操作的代价为O(M*lgn)。伸展树的最核心的操作就是伸展,插入、删除、查找都原创 2012-08-31 11:08:27 · 733 阅读 · 0 评论 -
平衡二叉树(AVL)的另一种C++实现
平衡二叉树(AVL)的插入和删除详解(上):http://blog.csdn.net/sysu_arui/article/details/7897017平衡二叉树(AVL)的插入和删除详解(下):http://blog.csdn.net/sysu_arui/article/details/7906303前面详细介绍了平衡二叉树的插入和删除的实现,前面实现中结点使用的是一个值为-1、0、1的原创 2012-08-29 18:51:02 · 2504 阅读 · 0 评论 -
平衡二叉树(AVL)的插入和删除详解(上)
AVL树维基百科:http://zh.wikipedia.org/wiki/AVL树在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M原创 2012-08-22 19:02:16 · 21526 阅读 · 9 评论 -
二叉树的非递归遍历及层次遍历
二叉树的基本操作请看:http://blog.csdn.net/sysu_arui/article/details/7865876前面简答介绍了二叉树的基本操作,包括二叉树的建立,销毁,递归遍历,以及其他一些常见的递归算法,现在集中讨论一下二叉树的层次遍历和非递归遍历。二叉树的层次遍历要用到队列,前序、中序和后序非递归遍历要用到栈,这里我就不自己写队列和栈了,直接使用C++标准库中的容器适原创 2012-08-14 17:10:50 · 16923 阅读 · 2 评论 -
红黑树(Red BlackTree)的实现
前面我们讲解了简单二叉查找树、AVL树,伸展树,对于一棵高度为h的二叉查找树,其动态集合操作Search、Minimum、Maximum、Successor、Predecessor、Insert、Delete的运行时间为θ(h),树的高度决定了在树上操作的成本。一些常见的搜索树的高度:平衡二叉搜索树:O(lgn)1962年提出的AVL树:1972年提出的红黑树: 红黑原创 2012-09-04 12:41:07 · 2599 阅读 · 0 评论