一、题目
7-6 二叉树查找结点及父结点 (5 分)
编写程序在二叉树中查找给定结点及父结点。二叉树结点的数据域值不等于0的整数。
输入格式:
输入第1行为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列,其中空指针用0表示。例如1 5 8 0 0 0 6 0 0表示如下图的二叉树。第2行为整数m,表示查询个数。接下来m行,每行为一个不等于0的整数K,表示要查找的结点的数据值。m不超过100,二叉树结点个数不超过150000,高度不超过6000。输入数据保证二叉树各结点数据值互不相等。
输出格式:
输出为m行,每行1个整数,表示被查找结点K的父结点数据值,若二叉树中无结点K或结点K无父结点,则输出0。
输入样例:
1 5 8 0 0 0 6 0 0
3
8
1
6
输出样例:
5
0
1
二、分析
递归模拟前缀表达式的建图过程,另外使用map记录当前节点为x时,其父节点的值。
三、代码
#include <bits/stdc++.h>
using namespace std;
map<int, int> M;
void dfs(int root)
{
int x;
cin >> x;
M[x] = root;
if (x != 0)
dfs(x), dfs(x);
}
int main()
{
dfs(0);
int q;
cin >> q;
while (q--)
{
int x;
cin >> x;
cout << M[x] << endl;
}
return 0;
}