【C++】已通过
#include<string>
using namespace std;
class BTNode {
public:
char value;//节点值
BTNode *l;//左孩子
BTNode *r;//右孩子
BTNode() {
value = '0';
l = NULL;
r = NULL;
}
~BTNode() {
this->l = NULL; this->r = NULL;
delete(this);
}
};
//利用先序遍历构建二叉树
void initBT(BTNode * root) {
//访问结点值
//访问左子树
char temp = cin.get();
if (temp == '#') {
root->l = NULL;
}
else {
BTNode *btn1 = new BTNode();
btn1->value = temp;
root->l = btn1;
initBT(root->l);//接着对左子树先序遍历
}
//访问右子树
temp = cin.get();
if (temp == '#') {
root->r= NULL;
}
else {
BTNode *btn2 = new BTNode();
btn2->value = temp;
root->r = btn2;
initBT(root->r);//接着对右子树先序遍历
}
}
//中序遍历并进行输出
void inOrderTravel(BTNode * root) {
if (root == NULL)return;//空结点,直接返回
//访问左子树
if (root->l != NULL) {
inOrderTravel(root->l);//访问左子树
}
//访问结点值
cout << root->value << " ";
//访问右子树
if (root->r != NULL) {
inOrderTravel(root->r);//访问右子树
}
}
int main() {
char c = cin.get();
BTNode *root = new BTNode();
root->value = c;
initBT(root);//构建二叉树
inOrderTravel(root);//中序遍历,并且输出中序序列
cout << endl;
return 0;
}