7-9 名单留下的叶子(25 分)

给定一棵树,您应该按照自上而下和从左到右的顺序列出所有叶子。

输入规格:
每个输入文件包含一个测试用例。对于每种情况,第一行给出正整数N(≤ 1 0),这是树中的节点的总数-并且因此节点编号从0到N - 1。
然后随后是 N行,每行对应一个节点,并给出节点左右子节点的索引。如果孩子不存在,将在该位置放置“ - ”。任何一对孩子都被一个空间隔开。

输出规格:
对于每个测试用例,按照自上而下和从左到右的顺序在一行中打印所有叶子的索引。任何相邻数字之间必须只有一个空格,并且该行末尾没有额外的空格。

样本输入:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
样本输出:
4 1 5
 

#include<cstdio>
#include<queue>
#include<cstdlib>
using namespace std;
typedef struct
{
    int index;
    int lchild;
    int rchild;
}Node;
Node node[10];
int findRoot[10]={0};
int main()
{
    int n;
    scanf("%d",&n);
    char ch = getchar();
    for(int i =0 ;i < n; i++)
    {
        char left,right;
        scanf("%c %c",&left,&right);
        char ch = getchar();
        node[i].index=i;
        if(left != '-')
        {
            node[i].lchild = left - '0';
        }
        else
        {
            node[i].lchild = -1;
        }
        if(right != '-')
        {
            node[i].rchild = right - '0';
        }
        else
        {
            node[i].rchild = -1;
        }
    }
    for(int i = 0; i < n; i++)
    {
        int child;
        if(node[i].lchild != -1)
        {
            child = node[i].lchild;
            findRoot[child] = 1;
        }
        if(node[i].rchild != -1)
        {
            child = node[i].rchild;
            findRoot[child] = node[i].rchild;
        }
    }
    int Root;
    for(int i = 0; i < n; i++)
    {
        if(findRoot[i] == 0)
        {
            Root = i;
            break;
        }
    }
    int count = 0;
    queue <Node> Que;
    Que.push(node[Root]);
    while(!Que.empty())
    {
        Node tempnode = Que.front();
        Que.pop();
        int child;
        if(tempnode.lchild != -1)
        {
            child = tempnode.lchild;
            Que.push(node[child]);
        }
        if(tempnode.rchild != -1)
        {
            child = tempnode.rchild;
            Que.push(node[child]);
        }
        if(tempnode.lchild == -1&& tempnode.rchild == -1)
        {
            if(count == 0)
            {
                printf("%d",tempnode.index);
                count = 1;
            }
            else
            {
                 printf(" %d",tempnode.index);
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40099908/article/details/81610682