此处按照先序遍历创建二叉树,按中序遍历输出,详见https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=40&tqId=21342&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan&difficulty=&judgeStatus=&tags=/question-ranking
#include<iostream>
using namespace std;
class Node {
public:
char data;
Node* left, * right;
Node() {};
};
class Tree {
public:
Node* root;
Tree() {
root = NULL;
}
Node* createTree(Node* root);
void midTraversal(Node* root);
};
Node* Tree::createTree(Node* node) {
char c;
//cin >> c;
c = getchar();
if (c == '#') {
node = NULL;
}
else {
node = new Node();
node->data = c;
node->left = createTree(node->left); // 要用node->left接住返回值,不然不无改变node->left
node->right = createTree(node->right);
}
return node;
}
void Tree::midTraversal(Node* node) {
if (node == NULL) {
return;
}
else {
midTraversal(node->left);
cout << node->data << ' ';
midTraversal(node->right);
}
}
int main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
Tree* tree = new Tree();
tree->root = tree->createTree(tree->root); // 要用tree->root接住返回值,不然不无改变tree->root
tree->midTraversal(tree->root);
}
终端输入输出:
abc##de#g##f###
c b e g d f a