自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 重建二叉树

题目 :输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。思路:在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历中,根节点的值在序列的中间,左子树的节点再根节点的左边右子树的节点在树的右边。1.根据前序和中序的特点得到根节点为1的左右子树图:2.根节点1的左指针指向2的左右子树图:3.

2016-10-27 23:44:00 265

原创 判断一颗二叉树是否为平衡树

平衡树是每一颗节点的左右子树高度差不超过1的。思路:只需要将右子树的高度减去左子树的高度的绝对值不超过2,就是一颗平衡树。代码:1.普通版本,时间复杂度为O(N^2)bool _IsBalance(Node* root) { if(root==NULL) return true; int LeftHeight=_Height(root->_left );

2016-10-25 21:47:53 316

原创 AVLTree----平衡二叉搜索树

1.定义:AVL树又称为高度平衡的二叉搜索树,它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。2.AVL树的性质(1). 左子树和右子树的高度之差的绝对值不超过1。(2). 树中的每个左子树和右子树都是AVL树。(3).每个节点都有一个平衡因子(balance factor--bf),任一节点的平衡因子是-1,0,1。(每个节点的平衡因子等于右子树的高度减去左

2016-10-25 21:28:41 361

原创 将搜索二叉树转成有序的双向链表

二叉搜索树的性质:1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同, key值不可改。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。4. 左右子树都是二叉搜索树。思路:根据搜索二叉树的性质,我们可以得知,当中序遍历它是有序的。          因

2016-10-22 00:05:35 739

原创 二叉搜索树(递归和非递归分别实现)

这是在上一篇博客的基础上进行完善。1.插入的递归bool InsertR(const T& key) { return _InsertR(_root,key); }bool _InsertR(Node*& root,const T& key) { if(root==NULL) { root=new Node(key); return true; }

2016-10-21 23:28:22 357

原创 稀疏矩阵(实现快速转置和普通转置)

1.M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。2.稀疏矩阵的压缩存储:压缩存储值存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放。 3.矩阵的转置:将原矩阵的行、列对换,也就是将[i][j]和[j][i]位置上的数据对换。(转置有快速转置和普通转置)

2016-10-20 17:02:21 1490

原创 对称矩阵及对称矩阵的压缩存储

1.对称矩阵:设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 2.压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n(n+1)/2个数据(根据等差数列的前n项和可求得)。3.对称矩阵和压缩存储的对应关系:下三角存储i>=j, SymmetricMatrix[i][j] == Array[i*(i+1)/2+j]。4.这就是一个对称矩阵

2016-10-20 16:48:57 1073

原创 哈夫曼树

Huffman树,又称为最优二叉树,是加权路径长度最短的二叉树。【贪心算法】是指在问题求解时,总是做出当前看起来最好的选择。也就是说贪心算法做出的不是整体最优的的选择,而是某种意义上的局部最优解。贪心算法不是对所有的问题都能得到整体最优解。使用贪心算法构建Huffman树templatestruct HuffmanTreeNode{ T _weight; HuffmanTree

2016-10-18 19:09:08 350

原创 二叉搜索树

二叉搜索树的性质:1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。4. 左右子树都是二叉搜索树。5.中序遍历的结果是有序的。我在这里分析一下删除一个节点的思路:(1).当删5这个节点时,直

2016-10-18 18:56:16 222

原创 堆排序

堆排序是在堆的基础上排序呢,如果要升序排序就要建大堆,如果要降序排序就要建小堆,时间复杂度为O(N*lgN)。#includeusing namespace std;#include#include//#include"Heap.h"//仿函数==>函数对象templatestruct Up{ bool operator()(const T& m,const T& n)

2016-10-16 22:42:36 255

原创 中序、前序、后序遍历线索化二叉树

1.二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或用栈辅助实现非递归的遍历,用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱和后继。2.为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。   创建节点:enum PointerTag{ THREAD, LINK,};te

2016-10-14 20:34:31 1162

原创 递归和非递归遍历二叉树

#includeusing namespace std;#include#include#includetemplatestruct BinaryTreeNode{ BinaryTreeNode(const T& data) :_data(data) ,_left(NULL) ,_right(NULL) {} BinaryTreeNode* _left; Bina

2016-10-12 19:13:14 197

原创 堆---heap

堆的数据结构是一种数组对象,它可以视为一颗完全二叉树结构。堆结构的二叉树存储是:最大堆:每个父节点都大于孩子节点。最小堆:每个父节点都小于孩子节点。#includeusing namespace std;#include#include#include//仿函数==>函数对象templatestruct GreatBig{ bool operator()(con

2016-10-12 18:58:35 213

原创 栈和队列面试题

1.实现一个栈,要求实现Push(入栈),Pop(出栈),Min(返回最小值得操作)的时间复杂度为 O(1)思路:用已有的栈来完成时间复杂度为O(1)的栈datastack  数据栈 push 2 3  1 4 pop  2 3  pop  2 minstack   辅助栈          2 2  1 1         2 2         2templateclass

2016-10-11 16:16:24 397

原创 用迭代器实现list的各种功能

#include#include#include#includeusing namespace std;templatestruct _ListNode{ _ListNode* _prev; _ListNode* _next; T _data; _ListNode(const T& x) :_data(x) ,_prev(0) ,_next(0) {}};

2016-10-11 15:46:58 1209

原创 走迷宫问题

1.这个是迷宫,1代表墙,0代表通路。1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 10 0 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 0 0 0 0 0 1 11 1 0 1 1 1 1 0 1 11 1 0 1 1 1

2016-10-10 22:35:06 424

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除