对于给定的二叉树,本题要求你按从上到下顺序输出指定结点的所有祖先结点。
输入格式:
首先第一行给出一个正整数 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
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;
}