//注意,idx设置为& ; 并且在为空树的时候依然idx++ . #include <iostream> using namespace std; struct TreeNode { char elem ; TreeNode* left ; TreeNode* right ; TreeNode(char c):elem(c) , left(nullptr) , right(nullptr) {}; } ; // int idx = 0 ; // 因为树的遍历有回溯所以idx 要设为全局。 TreeNode* build(const string & s , int &idx ) { if(idx == s.size()) { return nullptr; } if(s[idx] == '#') { idx++ ; // 遇到为'#' 的表示为遇到无左右子树的。 return nullptr; } TreeNode * root = new TreeNode(s[idx] ); // idx++ ; root->left = build(s , idx) ; // 左孩子 // idx ++ ; root->right = build(s , idx ) ; // 右孩子 return root ; } ; void inorder(TreeNode * cur) { if(cur == nullptr) { return ; } inorder(cur->left) ; cout<<cur->elem<<" " ; inorder(cur->right) ; } int main() { // TreeNode t ; string s ; // while(cin>>s) // { cin>>s ; int idx = 0 ; TreeNode* root = build(s , idx) ; inorder(root) ; cout<<endl ; // } } // // 64 位输出请用 printf("%lld") // #include<iostream> // using namespace std; // string s ; // int pos; // struct Tnode{ // char val; // Tnode* left; // Tnode* right; // Tnode(char c): val(c), left(NULL), right(NULL){} // }; // //递归建树 // Tnode* createTree(){ // char c = s[pos++]; // if(c == '#')//为空,返回上个节点 // return NULL; // Tnode* root = new Tnode(c);//新建节点 // root->left = createTree();//建立左子树 // root->right = createTree();//建立右子树 // return root; // } // void inOrder(Tnode* T){ // if(!T) return ; // inOrder(T->left); // cout << T->val << " "; // inOrder(T->right); // } // int main(){ // while(cin>>s){ // pos = 0; // Tnode* root = createTree(); // inOrder(root); // cout << endl; // } // return 0; // }