PTA 列出所有祖先结点

对于给定的二叉树,本题要求你按从上到下顺序输出指定结点的所有祖先结点。

输入格式:
首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。

随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。

最后一行给出一个结点的编号i(0≤i≤N-1)。

输出格式:
在一行中按规定顺序输出i的所有祖先结点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7
2 -
- 6
- -
0 5
- -
4 1
- -
4

输出样例:

3 5

代码如下:

#include<bits/stdc++.h>

using namespace std;
int pttree[20];//下标为该节点的序号,存放的是双亲结点的序号
int ans[20];//存放答案
int main()
{
    
    
    int n,root;
    cin>>n;
    memset(pttree,-1,sizeof(pttree));//初始化
    for(int i = 0; i<n; i++){
    
    
        char a,b;
        cin>>a>>b;
        if(isalnum(a)){
    
    
            pttree[a-'0'] = i;
        }
        if(isalnum(b)){
    
    
            pttree[b-'0'] = i;
        }
    }
    for(int i = 0; i<n; i++)
        if(pttree[i] == -1){
    
    //找出根节点
            root = i;
            break;
        }
    int k,c = 0;
    cin>>k;
    while(pttree[k] != -1){
    
    //从目标结点往上找
        ans[c++] = pttree[k];//记录路径
        k = pttree[k];
    }
    for(int i = c-1; i>=0; i--){
    
    
        cout<<ans[i];
        if(i)cout<<" ";
    }
    cout<<endl;
    cin.get();
    cin.get();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45732455/article/details/110008741
PTA
今日推荐