Git的诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。 Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这…
二叉树深度和平衡二叉树的判定
二叉树的深度 对于二叉树的深度的求解,利用递归的方式求解很简单: 下面就来设计这个递归算法: 要求一个节点的高度,先求左子树的高度,然后再求解右子树的高度。 最后树的高度就是1+max(left_depth, right…
数据结构--图的定义和存储结构
图的定义 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成。注意:在图结构中,不允许没有顶点,在定义中,如果V是顶点的集合,则强调了顶点集合V的有穷非空。 在图中,若不存在顶点到其自身的边,且同一条边不重复出…
C语言队列的实现
队列是常用的数据结构之一,下面给出一个链式队列的实现: 头文件Queue.h 1 #ifndef Queue_H 2 #define Queue_H 3 4 typedef int Item; 5 typedef str…
数据结构:队列的顺序存储结构(循环队列)
队列的定义: 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列的抽象数据类型: ADT 队列(Queue) Data 同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系。 Operation …
数据结构:队列的链式存储结构
链队列的实现方法: 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,简称为链队列。为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点。空队列时,front和rear都指向头节…
[链表常用技巧]链表逆序+链表中点
链表逆序 给定一个链表,一般的逆序的方法要设置三个指针,这种操作很繁琐,下面总结一种简单的方法: 为链表设置一个头结点,然后head后面的节点依次的插入到head结点之前。最后完成链表的逆序。 代码实现: ListNod…
[树结构]平衡二叉树AVL
平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1,平衡二叉树又称为AVL树。 将二叉树节点的左子树深度减去右子树深度的值称为平衡因子BF,平衡二叉树上所有节点的平衡因子只可能是-1,0或者1。 …
二叉树的下一个结点
题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 因为是中序遍历,所有要找的这个父结点,肯定有这样的特征: 当前结点…
二叉树树的层次遍历实现
二叉树的所有的操作基本上都是跟遍历相关的,二叉树的深度遍历(先序、中序、后序)都设计栈的操作,但是二叉树的广度搜索(层次遍历)用到的就是队列的操作。 注意一点,二叉树的层次的遍历要得到的结果是把所有的信息放到一个一维的数…
[树结构]二叉树的重建和序列化
二叉树的重建 几乎所有的人都知道二叉树可以根据前序遍历+中序遍历或者后序遍历+中序遍历的方式重新建立原来的二叉树,并且结果是唯一的。下面就来看一下相关的方法。 前序+中序重建二叉树 给定一棵二叉树的前序和中序遍历序列,重…
字符串全排列和组合算法
打印字符串的全排列 算法的思路: 把一个字符串分成两部分,第一个字符+后面部分所有的字符。这样就能够递归的求解整个过程了: 1.每个字符都做一次首字符 2.当某个字符作为首字符的时候,求后面所有字符的全排列 而这里的求后…