利用前序遍历的特性,如果左子树不空,下一个一定是左节点,不然就是#
因为是转中序遍历,就在两次遍历之间输出

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int k;
string str;

void dfs()
{
    if (str[k] == '#')
    {
        k ++ ;
        return;
    }
    char r = str[k ++ ];  // 根节点
    dfs();  // 左子树
    cout << r << ' ';
    dfs();  // 右子树
}

int main()
{
    cin >> str;
    dfs();
    return 0;
}