先上效果图

然后上代码
std::vector<TreeNode *> inorderTraversal(TreeNode *root) {
std::vector<TreeNode *> res;
std::stack<TreeNode *> stk;
while (root != nullptr || !stk.empty()) {
while (root != nullptr) {
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
res.push_back(root);
root = root->right;
}
return res;
}
void printTree(TreeNode *root) {
if (!root)return;
auto tmp = root;
std::vector<TreeNode *> intv = inorderTraversal(tmp);
std::string template_str;
int location = 0;
std::unordered_map<TreeNode *, int> first_locations;
for (auto &i : intv) {
location = template_str.size();
template_str += std::to_string(i->val) + " ";
first_locations[i] = location;
}
for (auto &i:template_str)i = ' ';
std::queue<TreeNode *> q;
q.push(root);
while (!q.empty()) {
int currentLevelSize = q.size();
int cur_loc = 0;
std::string tmp_str1 = template_str, tmp_str2 = template_str;
for (int i = 1; i <= currentLevelSize; ++i) {
auto node = q.front();
q.pop();
cur_loc = first_locations[node];
std::string num_str = std::to_string(node->val);