在计蒜客上学了二叉树,感觉自己还学了点东西,就贴在这里吧
#include<iostream> #include<string> using namespace std; class Node { public: char data; Node *lchild, *rchild; Node(int _data) { data = _data; lchild = NULL; rchild = NULL; } ~Node() { if (lchild != NULL) { delete lchild; } if (rchild != NULL) { delete rchild; } } void preorder(){ //先序遍历 cout <<data<<" "; if(lchild!=NULL){ lchild-> preorder(); } if(rchild!=NULL){ rchild-> preorder(); } } void inorder(){ //中序遍历 if(lchild!=NULL){ lchild->inorder(); } cout <<data<<" "; if(rchild!=NULL){ rchild->inorder(); } } void postorder() { //后序遍历 if (lchild != NULL) { lchild->postorder(); } if (rchild != NULL) { rchild->postorder(); } cout << data; } //已知先序和中序,求后序 Node* build(const string &pre_str,const string &in_str,int len){ Node* p=new Node(pre_str[0]-'0'); int pos=in_str.find(pre_str[0]); if(pos>0){ p->lchild=build(pre_str.substr(1,pos),in_str.substr(0,pos),pos); } if(len-pos-1>0){ p->rchild=build(pre_str.substr(pos+1),in_str.substr(pos+1),len-pos-1); } return p; } }; class BinaryTree { private: Node *root; public: BinaryTree() { root = NULL; } ~BinaryTree() { if (root != NULL) { delete root; } } BinaryTree(const string &pre_str,const string &in_str,int len){ root=root->build(pre_str,in_str,len); } void preorder(){ root->preorder(); } void inorder(){ root->inorder(); } void postorder() { root->postorder(); } }; int main() { string pre_str; string in_str; cin>>pre_str; cin>>in_str; BinaryTree binarytree(pre_str,in_str,in_str.length()); binarytree.postorder(); cout <<endl; return 0; }