对于给定的二叉树,本题要求你按从上到下顺序输出指定结点的所有祖先结点。
输入格式:
首先第一行给出一个正整数 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 <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,j,c=1;
char a,b;
scanf("%d",&n);
int x[2][n];//L R;
int y[n],top=0;
for(i=0;i<n;i++)
{
scanf(" %c %c",&a,&b);
if(a=='-')
{
x[0][i]=-1;
}
else
x[0][i]=a-'0';
if(b=='-')
{
x[1][i]=-1;
}
else
x[1][i]=b-'0';
}
scanf("%d",&i);
while(c)
{
c=0;
for(j=0;j<n;j++)
{
if(x[0][j]==i||x[1][j]==i)
{
y[top++]=j;
i=j;
c=1;
break;
}
}
}
if(top!=0)
printf("%d",y[--top]);
while(top)
{
printf(" %d",y[--top]);
}
return 0;
}