
数据结构
文章平均质量分 70
lang的飞起
这个作者很懒,什么都没留下…
展开
-
简单的折半查找
#includeint search(int a[],int j,int low,int heigh)//折半查找,在数组a中下标从low到heigh查找j{ int mid; if(low<=heigh) { mid = (low+heigh)/2; if(mid==j) return mid; else if(j<a[mid]) return search(a原创 2015-12-16 20:37:42 · 271 阅读 · 0 评论 -
二叉树专题-lintcode翻转二叉树
利用递归,交换左右子树即可,属于容易题class Solution {public: /** * @param root: a TreeNode, the root of the binary tree * @return: nothing */ void invertBinaryTree(TreeNode *root) { //原创 2017-10-31 15:31:16 · 269 阅读 · 0 评论 -
二叉树专题-验证二叉查找树
注意,题目中给的定义是严格小于,严格大于,不包含等于。这样,每个位置的值实际上必须在一个区间内。可以用递归的先序遍历的方法,先判断根是否在对应区间内,再判断左子树与右子树。举一个例子: 对于根节点,任意取;向左,需要严格小于1,故区间变为[负无穷,1),向右,需要大于1,故区间变为(1,正无穷];走到4时,区间为(1,3),4不在这个区间内,即不是二叉查找树 例子中的正原创 2017-10-23 09:37:49 · 614 阅读 · 0 评论 -
二叉树专题-lintcode路径相关
二叉树中路径相关的问题一直是常考题,这也是深搜的问题。由于路径要从根节点开始,故也是一个先序遍历的问题。 不熟悉的话,建议看一下这几个例子,熟悉一下深度优先搜索和二叉树的遍历:DFS求全排列 DFS生成括号 二叉树的遍历 来看一下几道题目: 典型的递归深搜,如果对前面DFS的例子熟悉的话,很容易能解决。搜到了叶子结点,然后存入即可。vector binar原创 2017-10-20 15:48:35 · 204 阅读 · 0 评论 -
二叉树专题-lintcode二叉树的层序遍历
层序遍历算是遍历方式中,比较容易掌握的,实质就是宽度优先遍历,BFS的基本代码块如下;void BFS(){ 创建队列 第一个元素入队 while(队列非空){ 取队首元素top 出队 访问top 下一层的元素按顺序入队 }} 放到二叉树的遍历中来看,首先根节点入队,根出队,访问根节点,再入队左孩子,入队右孩子;这样再出队时,就是访问的第二层的左侧...原创 2017-10-19 17:46:15 · 230 阅读 · 0 评论 -
二叉树专题-根据前序和中序序列构造二叉树
经典的二叉树构造的问题,例子:(注意题目中限定了,没有重复的元素),先序为2143,中序为1423我们先手算一下,看看是如何构造的。先序第一个为2,则根为2,那么去中序中找2,就能够区分左右子树了。14在左子树,3在右子树。且左子树的先序序列为14,中序也为14.....可以分析出来这是一个递归的过程。手工算到最后,很容易构造出二叉树。故递归函数必须要有preL,preR,inL,原创 2017-10-27 14:50:00 · 7247 阅读 · 0 评论 -
二叉树专题-lintcode非递归遍历与总结
紧接着上一篇文章讨论后序遍历的非递归写法,可以先看看上一篇文章:递归与非递归遍历 上一篇文章已经讨论到了:后序遍历要求最后访问根节点,访问完左子树后,要想进入右子树,无法直接跳入左子树,必须要有根的信息,从根节点才可进入右子树。但是栈中只保存了一次根的信息,出栈后获取了根,访问右子树,访问完了后便丢失了根的信息。这个特点导致了后序遍历的非递归写法比先序,中序复杂。 我们有了将节点入栈2原创 2017-10-18 15:26:53 · 247 阅读 · 0 评论 -
数组的顺序表示与实现
#include#include#include//使用变长参数表需要引入此头文件#define MAX_DIM 8typedef struct { int * base;//数组元素基址 int * bounds;//数组维数基址,bounds[0]=3,bounds[1]=4,bounds[2]=2,表示3页4行2列的数组 int * constants;//数组映像函数常量基原创 2016-10-04 20:58:51 · 2075 阅读 · 0 评论 -
循环队列的小例子
问题:利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。ih#include#include#include#define MAXSIZE 100typedef struct{ char name[20];}dancer;typedef struc原创 2015-12-08 22:06:31 · 733 阅读 · 0 评论 -
二分法专题-lintcode二分法问题解惑
二分法是常考的算法,适用于:在一个有序的序列中,找第一个满足某条件的位置(当然也可以找满足某条件的最后一个位置)学习过程中让人迷惑的问题有:上下限的确定,low=0,high=n-1还是low=0,high=n循环条件low循环中low=mid还是low=mid+1,high=mid还是high=mid-1有些情况无法退出循环,即是要mid=(low+high)/2还是mid=(l原创 2017-11-27 09:02:08 · 491 阅读 · 0 评论