算法学习之路|树的一些知识

简介: 有关树的一些知识的笔记

二叉树


对于完全二叉树,,由于其特殊的性质(第k节点的左子节点编号2k,右子节点编号2k+1),可以直接利用此性质建树:
void build(int l,int r,int rt)
{
    if(l==r)
      {
        sum[rt]=a[l];//a[i]是原数组
    return;}
        int m=(l+r)>>1;
        //递归
    build(l,m,rt<<1);
    build(m+1,r,rt<<1|1);//rt为当前节点编号
}

(线段树)

层次遍历二叉树


对于需要动态建树的问题,可以通过指针或者数组来建立节点之间的联系
struct node
{
    bool value;
    int v;
    node *left,*right;
    node():value(false),left(NULL),right(NULL){}//构造函数
};
node*root;

每次建立新节点都要申请新内存,调用一次newnode函数:

node*newnode(){return new node();}

建立根节点并向左或向右走:

    node*u=root;
    if(u->left==NULL)u->=newnode();
    u->=left;
    if(u->right==NULL)u->=newnode();
    u->=right;

邻接表和邻接矩阵


用于存储图

邻接矩阵用的二维数组在图节点数过多时很容易超出内存,但用起来方便,适合节点数较少的图或者稠密图

ai即表示从i指向j的边的权值,无此条边就可以设为无穷

 

邻接表可以用纯数组表示或者用指针,个人喜欢数组:

int n,m,i;
int u[m+1],v[m+1],w[m+!];
int first[n+1],next[m+!];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
    first[i]=-1;
}
for(i=1;i<=m;i++)//关键
{
    scanf("%d%d%D",&u,&v,&w);
    next[i]=first[u[i]];
    first[u[i]]=i;
}

读取部分:

    for(int i=1;i<=n;i++)
    {
        k=first[i];
        while(k!=-1)
        {
            printf("输出内容");
            k=next[k];
        }
    }

如果待存储的图有n个节点,m条边
first数组用来存储当前读入的边的起始点,即first数组长度为n;每读入一条边,更新next数组,next数组表示:指向当前存储的边的起始点的上一条边的编号,没有上一条边就赋值-1。即每一条边都对应next数组一个值,next数组长度为m。

目录
相关文章
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
29天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
27 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】