struct Node{
char data;
Node* right, *left;
};
class Bitree{
public:
Bitree(){
root = new Node();
root->left = nullptr;
root->right = nullptr;
}
void CreateBitree(string &s){
int pos = -1;
root = Create(s,pos);
}
Node* Create(string &s, int &pos){// 注意这里的pos一定要写成引用,否则不能保证pos的累加
pos++;
Node* node ;
if(pos > s.size()) return nullptr;
else if(s[pos] == '#') node = nullptr;
else{
node = new Node();
node->data = s[pos];
node->left = Create(s, pos);
node->right = Create(s, pos);
}
return node;
}
void preorder(Node* p){
if(!p) return;
cout<< p->data<<endl;
preorder(p->left);
preorder(p->right);
}
Node* root;
};
int main(){
string s = "ABD##E#F##C##";
Bitree t;
t.CreateBitree(s); //通过先序遍历的顺序构造二叉树
t.preorder(t.root);
return 0;
}