• P1305 新二叉树 【寻找根节点进行先序遍历】


    题目

    https://www.luogu.com.cn/problem/P1305

     思路

    本题的注意事项就是首先要确定输入的根节点,我们可以发现就是从来没有在左子树以及右子树出现的节点就是根节点,所以我们先用map标记所有出现的节点,再记录下来所有子树对应的父亲节点,这样即在map中标记过又没有父亲节点的就是根节点

    代码

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<map>
    using namespace std;
    struct node
    {
        char data;
        char left;
        char right;
        char father;
    }list[200];
    map<char, int>cc;
    void run(int root)
    {
    
        printf("%c", list[root].data);
        if (list[root].left != '*')    run(list[root].left - 96);
        if (list[root].right != '*')run(list[root].right- 96);
    }
    
    int main()
    {
        int n;
        cin >> n;
        getchar();
        for (int i = 0; i < n; i++)
        {
            char a, b, c;
            cin >> a >> b >> c;
            list[a-96].data = a;
            cc[a] = 1;
        
                list[a-96].left = b;
                if(b!='*')
                list[b-96].father = a;
            
            
                list[a-96].right = c;
                if(c!='*')
                list[c-96].father = a;
            
        }
        int root = 0;
        for (int i = 0; i < 200; i++)
        {
            if (list[i].father == ''&&cc[list[i].data]==1) { root = i; break; }
        }
        run(root);
    
    
    }
  • 相关阅读:
    二叉树遍历
    php环境搭建工具推荐
    laravel框架包资源分享
    memcached配置
    双引号转义问题
    PHP命名空间
    正则表达式
    2017,起航!
    关于大数据量下进行大数据展示的杂谈
    mysql空数据的处理
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13201181.html
Copyright © 2020-2023  润新知