
算法与数据结构
q354636996
人生苦短,我用Python
展开
-
二叉树非递归遍历
void PreOrder(BiTree T){ InitStack(S); BiTree p=T; while(p||!IsEmpty(S)){ if(p){ visit(p); push(S,p); p=p->lchild; }else{ pop(S,p); p=p->rchild; } }}void InOrder(BiT...原创 2019-12-08 16:06:10 · 714 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)算法(单源最短路径)
时间复杂度是O()不能处理存在负边权的情况#include<iostream>using namespace std;int m,n,s;int inf=99999999,minn=0;int i,j,u;int e[11][11],dis[11],book[11]={0};int main(){ cin>>n>>m>>s...原创 2018-12-14 14:18:34 · 247 阅读 · 0 评论 -
二叉树和完全二叉树的性质
1.第i层至多有个结点(i>=1)2.深度为k的二叉树至多有个结点(k>=1)3.叶子结点数为,度为2的结点数为,则=+1。(证明:)下面是完全二叉树的性质特点:叶子结点在层次最大的两层出现;对于任意结点,右分支下的子孙的最大层次为k,左分支下的子孙的最大层次比为k或k+1.4.n个结点的完全二叉树的深度为int_down()+1。5.将完全二叉树自顶而下,同一...原创 2019-04-17 11:21:30 · 5527 阅读 · 0 评论 -
并查集
(一)寻找帮会老大int getf(int v){ if(f[v]==v)return v; else{ f[v]=getf(f[v]); return f[v]; }}如果某个人的大哥不是他自己的话,证明这个人并非帮会老大。所以就要递归寻找他大哥的大哥,一直找到帮会老大为止,递归开始返回。返回的时候需要注意,让途经所有人的大哥都变成帮会老大,所以每次返回的是帮会老...原创 2019-04-26 11:27:00 · 104 阅读 · 0 评论 -
通过先序遍历结果建立二叉树以及遍历二叉树的方法
在网上看到很多建立二叉链表的方法,我比较认可的一种方法是:#include <iostream>#include <cstdlib>using namespace std;typedef char ElemType;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}Bi...原创 2019-04-18 14:49:54 · 2843 阅读 · 0 评论 -
链表插入和删除操作时查找元素和链表查找元素的方法的区别
代码源自教科书先上代码typedef struct Node{ ElemType data; struct Node *next;}Node *LinkList;Status ListInsert(LinkList *L,int i,ElemType e)//插入需要三个参数 { //插入先查找 LinkList p=*L; int j=1; while(p&...原创 2019-05-02 21:38:34 · 823 阅读 · 0 评论 -
数据结构第六章习题
我会慢慢更新一些重要的习题1.一棵深度为H的满k叉树有如下性质:第H层上的结点都是叶子结点,其余各层上每个结点都有k棵非空子树。如果按层次顺序从1开始对全部结点编号,问:(1)各层的结点数目是多少?(2)编号为p的结点的父结点(若存在)的编号是多少?(3)编号为p的结点的第i个儿子结点(若存在)的编号是多少?(4)编号为p的结点有右兄弟的条件是什么?其右兄弟的编号是多少?答:(...原创 2019-04-19 11:14:29 · 6155 阅读 · 1 评论 -
弗洛伊德( Floyd )算法
如果借助顶点1,任意两点之间的最短路径更新为:借助顶点1的方法是:#include <iostream>using namespace std;int main() { int e[11][11],n,m,p,q,t; int inf = 99999999;//正无穷的定义,即使两个正无穷相加,结果也不超过int类型的范围 cin >&...原创 2019-04-28 16:54:25 · 169 阅读 · 0 评论 -
AVL树失衡的四种形态以及相应的旋转方法
原创 2019-04-25 14:27:42 · 832 阅读 · 0 评论