#include <iostream>
#include <stack>
using namespace std;
template <typename Object>
struct node //树的实现
{
Object data;
node* left;
node* right;
node(const Object& d=Object(), node* l=0, node* r=0) :
data(d), left(l), right(r) {}
};
template <typename Object>
void preordered(node<Object>* r, void visit(node<Object>*)) //前序遍历
{
if (r == 0) return;
visit(r);
preordered(r->left, visit);
preordered(r->right,visit);
}
template <typename Object>
void midordered(node<Object>* r, void visit(node<Object>*), int p=0) //中序遍历
{
if (r == 0) return;
bool b = p && r->left;
if (b) cout << '(' << ' ';
midordered(r->left, visit, p);
visit(r);
midordered(r->right,visit, p);
if (b) cout << ')' << ' ';
}
template <typename Object>
void postordered(node<Object>* r, void visit(node<Object>*)) //后续遍历
{
if (r == 0) return;
postordered(r->left, visit);
postordered(r->right,visit);
visit(r);
}
template <typename Object>
void printdata(node<Object>* r) {
cout << r->data << ' ';
}
template <typename Object>
void del(node<Object>* r) {
delete r;
}
char mp[128];
int main() {
char ch;
char op[] = "+-*/";
node<char>* root;
for (int i=0; op[i]!=0; i++)
mp[op[i]] = 1;
stack<node<char>*> st; //定义一个栈
while (cin>>ch) {
node<char> *l=0, *r=0;
if (mp[ch]) {
r = st.top(); st.pop();
l = st.top(); st.pop();
}
st.push(new node<char>(ch,l,r));
}
root = st.top(); st.pop();
midordered (root,printdata, 1);
cout << endl;
postordered(root,del);
system("pause");
return 0;
}
利用stack的搜索树的实现
最新推荐文章于 2023-07-19 21:05:07 发布