![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 57
frozen_flash
这个作者很懒,什么都没留下…
展开
-
根据二叉树前序/中序结果,建立二叉树
例如:在一棵二叉树总,前序遍历结果为:ABDGCEFH,中序遍历结果为:DGBAECHF,求后序遍历结果。我们知道:前序遍历方式为:根节点->左子树->右子树中序遍历方式为:左子树->根节点->右子树后序遍历方式为:左子树->右子树->根节点从这里可以看出,前序遍历的第一个值就是根节点,然后再中序遍历中找到这个值,那么这个值的左边部分即为当前二叉树的左子树部分前序遍历结果,这个值原创 2013-08-28 14:55:31 · 859 阅读 · 0 评论 -
三角矩阵一则
#include#include#include#includeusing namespace std;void show_msg(int* arr, int size, int max_line){ int ts = 0x00; for(int index = 0x00; index < max_line; index++) { int tmp = max_line;原创 2014-03-20 17:10:02 · 731 阅读 · 0 评论 -
后缀数组
后缀数组(suffix arrays)应该目前我看到的算法中最折磨人的一个了,(作者U.Manber:Suffix arrays: A new method for on-line string searches)功能非常强大,字符串匹配的利器。举个小例子先。在多字符串匹配算法中,如果文本长度为n, 模式的数量为k,模式长度为m,KMP算法单字串匹配为线性复杂度,总的复杂度为O(nK)。如果采转载 2013-09-05 17:42:47 · 757 阅读 · 0 评论 -
树的度
一、概念与图论中的“度”不同,树的度是如下定义的:有根树T中,结点x的子女数目称为x的度。也就是:在树中,结点有几个分叉,度就是几。一个有用的小公式:树中结点数 = 总分叉数 +1。(这里的分叉数就是所有结点的度之和)二、度的计算1.设树T的度为4,其中度为1,2,3,4的节点个数分别为4,2,1,1,则T中的叶子数为?解:叶子的度数为0;那么设转载 2013-09-05 11:02:51 · 15779 阅读 · 0 评论 -
字符串移位
#include#include#include#includeusing namespace std;//反转指定范围的字符串void verse_char(char* data, int left, int right){ for(int index = left; index <= right; index++,right--) { char ch = data[ri原创 2013-09-04 10:05:18 · 776 阅读 · 0 评论 -
基本排序算法总结
#include#include#include#include#include#includeusing namespace std;void show_arr(int* arr, int len){ for(int index = 0x00; index < len; index++) std::cout<<arr[index]<<" "; std::cout<<s原创 2013-09-03 13:54:06 · 876 阅读 · 0 评论 -
堆排序/插入/删除 整理
#include#include#include#includeusing namespace std;void swap(int* v1, int* v2){ int data = *v1; *v1 = *v2; *v2 = data;}//堆调整void adjust_heap(int* arr, int cur_index, int len){原创 2013-09-02 11:21:12 · 739 阅读 · 0 评论 -
旋转数组的二分法查找
/* 一数组, array [] = {1,2,3,4,5,6,7,8,9}; 从某一位置开始旋转,变为以下数组 array_ex[] = {6,7,8,9,1,2,3,4,5}; 现在给定一个数值x,查找x是否在该数组array_ex中 算法思想:1.如果数组为有序数组,没有移位的话,则直接用二分法查找即可 2.如果有移位的话,则满足arr[left] >= arr[right].出原创 2013-09-02 13:56:59 · 873 阅读 · 0 评论 -
二叉排序树整理
二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;③左、右子树本身又各是一棵二叉排序树。输入序列决定了二叉排序树的形态。二叉原创 2013-08-30 14:21:16 · 800 阅读 · 0 评论 -
二叉树转化为双链表
思想:以某个节点为根的子树所生成的链表=(左子树生成的链表)+根节点+(右子树生成的链表)递归函数如下:pNode tree_2_list(pNode pRoot, pNode& head, int flag){ if(pRoot) { //查找到最左边的双链表的头 if(head == NULL) { if(pRoot->left == NULL && p原创 2013-08-29 17:31:46 · 812 阅读 · 0 评论 -
线索二叉树---摘录
1. 线索化和线索化实质 将二叉树变为线索二叉树的过程称为线索化。 按某种次序将二叉树线索化的实质是:按该次序遍历二叉树,在遍历过程中用线索取代空指针。2.二叉树的中序线索化 (1)分析 算法与中序遍历算法类似。只需要将遍历算法中访问结点的操作具体化为建立正在访问的结点与其非空中序前趋结点间线索。 该算法应附设一个指针pre始终指向刚刚访问过的结点(pr转载 2013-08-29 11:01:07 · 756 阅读 · 0 评论 -
单链表反转
#include#includeusing namespace std;typedef struct Node{ int val; Node* next;}*pNode;void print_list(pNode head){ pNode tmp = head; while(tmp) { std::coutval<<" "; tmp = tmp-原创 2013-08-27 11:06:31 · 715 阅读 · 0 评论 -
单链表排序
#include#includeusing namespace std;typedef struct Node{ int val; Node* next;}*pNode;void print_list(pNode head){ pNode tmp = head; while(tmp) { std::coutval<<" "; tmp = tmp->next;原创 2013-08-27 13:51:14 · 711 阅读 · 0 评论 -
二叉树基本操作
#include #include #includeusing namespace std;//输入 "abdh..i..ej...cf..g.."typedef struct Node{ char data; struct Node *left; struct Node *right;}*pNode;//建立二叉树void create_tree(pNode &p原创 2013-08-28 13:07:37 · 650 阅读 · 0 评论 -
螺旋数组小计
#includeusing namespace std;#include #define M 11 void show(int arr[][M], int i, int js, int size) { for(int index = 0x00; index < size; index++) { for(int j = 0x00; j < size;j++) std:原创 2014-03-24 13:09:16 · 678 阅读 · 0 评论