c
#include <iostream>
#include <queue>
#include <vector>
#include <string>
using namespace std;
typedef char BTDataType;
typedef struct BTNode
{
BTDataType _data;
BTNode* _left;
BTNode* _right;
BTNode(BTDataType data, BTNode* left = nullptr, BTNode* right = nullptr)
: _data(data)
, _left(left)
, _right(right)
{
}
}BTNode;
BTNode* CreatBTree(string& str, size_t& i)
{
if (i >= str.size())
return nullptr;
if (str[i] == '#')
{
i++;
return nullptr;
}
BTNode* root = new BTNode(str[i++]);
root->_left = CreatBTree(str, i);
root->_right = CreatBTree(str, i);
return root;
}
bool GetPath(BTNode* root, BTDataType x, vector<BTNode*>& path)
{
//当前结点不空就记录 因为一定会路过
if (root == NULL)
return false;
path.push_back(root);
if (root->_data == x)
return true;
//当前结点的左右子树都没有找到 则x定不路过当前结点 尾删当前结点
if (!GetPath(root->_left, x, path) && !GetPath(root->_right, x, path))
{
path.pop_back();
return false;
}
else
return true;
}
int main()
{
string str;
getline(cin, str);
//建树
size_t index = 0;
BTNode* root = CreatBTree(str, index);
BTDataType x = 0;
cin >> x;
//找路
vector<BTNode*> path;
GetPath(root, x, path);
for(auto& e: path)
cout << e->_data << " ";
cout << endl;
return 0;
}