首页 > 其他 > 详细

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

时间:2020-06-28 10:10:14      阅读:59      评论:0      收藏:0      [点我收藏+]

题目

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 == \0&&cc[list[i].data]==1) { root = i; break; }
    }
    run(root);


}

 

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

原文:https://www.cnblogs.com/Jason66661010/p/13201181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!