2017年408专业算法题

这篇具有很好参考价值的文章主要介绍了2017年408专业算法题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 结果

2017年408专业算法题,# 树,408,算法,c++,图论

2017年408专业算法题,# 树,408,算法,c++,图论

1 题目

2017年408专业算法题,# 树,408,算法,c++,图论

2 思路

因为要转换为中序表达式,因此使用中序遍历。在中序遍历的过程中,对于当前访问的非空结点p,则先输出"(“,然后递归调用左子树,输出p的权值,递归调用右子树,输出“)”,如果p是根或者叶结点,则不需要输出“(”或”)"。

#include <vector>
using std::vector;
typedef char ElemType;

typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild, *rchild;
}BiTNode;


void inOrder(BiTNode* p){
    if(p == nullptr) return;
    if(p->lchild != nullptr || p->rchild != nullptr)
        printf("(");
    inOrder(p->lchild);
    printf("%c", p->data);
    inOrder(p->rchild);
    if(p->lchild != nullptr || p->rchild != nullptr)
        printf(")");
}

void ans(BiTNode* T){
    inOrder(T->lchild);
    printf("%c ", T->data);//单独处理根结点
    inOrder(T->rchild);
}

//char in[] = {'a', '+', 'b', '*', 'c', '*', '-', 'd'};//中序遍历
//测试序列2
char in[] = {'a', '*', 'b', '+', '-', 'c', '-', 'd'};//中序遍历
//层序、中序创建二叉树
BiTNode* Create4(vector<char> layer, int inL, int inR){
    if(layer.size() == 0){//当前层序遍历完
        return NULL;
    }

    BiTNode* root = new BiTNode ;
    root->data = layer[0];

    int k;
    for (k = inL; k <= inR; ++k) {//中序序列中寻找根结点
        if(in[k] == root->data){
            break;
        }
    }

    vector<char> leftLayer;//左子树层次遍历
    vector<char> rightLayer;//右子树层次遍历

    for (int i = 1; i < layer.size(); ++i) {//遍历层序序列,分左右子树存储
        bool isLeft = false;
        for (int j = inL; j < k; ++j) {
            if(layer[i] == in[j]){
                isLeft = true;
                break;
            }
        }
        if(isLeft == true){
            leftLayer.push_back(layer[i]);
        }else{
            rightLayer.push_back(layer[i]);
        }
    }

    root->lchild = Create4(leftLayer,inL, k - 1);
    root->rchild = Create4(rightLayer,k + 1, inR);

    return root;
}

int main(){
    BiTNode* root;

    vector<char> layer;//层序遍历
//    layer.push_back('*');
//    layer.push_back('+');
//    layer.push_back('*');
//    layer.push_back('a');
//    layer.push_back('b');
//    layer.push_back('c');
//    layer.push_back('-');
//    layer.push_back('d');
//测试序列2
    layer.push_back('+');
    layer.push_back('*');
    layer.push_back('-');
    layer.push_back('a');
    layer.push_back('b');
    layer.push_back('-');
    layer.push_back('c');
    layer.push_back('d');

    root = Create4(layer,  0, layer.size() - 1);
    ans(root);

    return 0;
}

附录

408历年真题算法题解析文章来源地址https://www.toymoban.com/news/detail-650946.html

到了这里,关于2017年408专业算法题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机考研】408算法大题怎么练?

    先说结论:基础阶段学好各个数据结构与,重点是数组、链表、树、图。然后强化阶段突破算法提 在基础阶段,并不需要过于专门地练习算法。相反,基础阶段的重点应该放在对各种数据结构原理的深入理解上。在我个人的经验中,我发现在这一阶段,建立对数据结构的扎实

    2024年04月10日
    浏览(41)
  • 【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)

    前面几篇文章介绍的是排序算法,现在让我们开始排序算法的专项练习。 1.希尔排序是稳定的算法。(错) 解析:稳定性是指如果两个元素在排序前后的相对顺序保持不变,那么这个排序算法就是稳定的。对于具有相同的元素,排序后它们的相对位置应该保持不变。

    2024年02月03日
    浏览(37)
  • cec2017(MATLAB):星雀优化算法(Nutcracker optimizer algorithm,NOA)

    星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜索食物的存储位置。星雀优化算法(Nutcracker optimizer algorithm,NOA)_IT猿手的博客-CSDN博客 参考文献: [1]Mohamed Abdel-Basset, Reda

    2024年02月06日
    浏览(31)
  • 智能算法终极大比拼,以CEC2017测试函数为例,十种智能算法直接打包带走,不含任何套路

    包含 人工蜂群(ABC)、灰狼(GWO)、差分进化(DE)、粒子群(PSO)、麻雀优化(SSA)、蜣螂优化(DBO)、白鲸优化(BWO)、遗传算法(GA)、粒子群算法(PSO) , 基于反向动态学习的差分进化算法 ,共 十 种算法,直接一文全部搞定! 其中基于反向动态学习的差分进化算法是我自己改进的。大家可

    2024年02月11日
    浏览(29)
  • 【C++算法竞赛 · 图论】图论基础

    前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类: 按边的类型分类: 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 图论(Graph theory) ,是 OI 中的一样很大的一个模块,围绕它有很多高难度的算法以及高级的概念。 这篇文章将介绍关

    2024年04月12日
    浏览(33)
  • 图论与算法(1)图论概念

    在计算机科学中,图论与算法是两个重要且紧密相关的领域。图论研究图的性质和特征,而算法设计和分析解决问题的方法和步骤。图论提供了一种形式化的方法来描述和分析各种关系和连接,而算法则为解决图相关的问题提供了有效的解决方案。 图论是研究图的结构和性质

    2024年02月07日
    浏览(30)
  • 算法提高-图论-floyd算法及其扩展应用

    离散化 (只要用到200个点,但是题目给的点编号是1-1000)+ 倍增(快速幂)+ flyod变式(将递推公式改变了) 能用快速幂的原因是递推公式里面的两端路径两两之间相互独立,用结合律就可以用快速幂。矩阵乘法能用快速幂的原因也是矩阵乘法中两两矩阵之间具有结合律 帮助

    2024年02月09日
    浏览(39)
  • 【数据结构与算法】图论及其相关算法

    线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父节点,当我们需要表示多对多的关系时, 这里我们就用到了图。 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:

    2024年02月09日
    浏览(33)
  • 【图论】kruskal算法

     Kruskal(克鲁斯卡尔)算法是一种用于解决最小生成树问题的贪心算法。 最小生成树是指在一个连通无向图中,选择一棵包含所有顶点且边权重之和最小的树。 下面是Kruskal算法的基本步骤: 将图中的所有边按照权重从小到大进行 排序 。 创建一个空的最小生成树 集合(并

    2024年02月15日
    浏览(26)
  • 图论中的算法

    图论的概念 :图论是数学的一个分支,它是以图为研究对象,图论中的图是由若干个给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些实体之间的某种特定的关系,用点代表实体,用连接两点之间的线表示两个实体之间具有某种关系。 图的分类: 无权无向

    2024年02月08日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包