من بالاخره اون برنامه رو فکر کنم به طور کامل(احتمالا) خودم نوشتم(که حتما ایراداتی داره) ولی یه مشکلی که داره اینه که موقع اجرا یه error ای می ده که هر کاریش می کنم درست نمی شه!
می شه لطفا بگید ایراد کار کجاست؟
صورت سوال : ساختار درخت دودویی را به صورت شی گرا پیاده سازی کرده سپس با استفاده از این ساختار درخت عبارت بسازید در نهایت الگوریتم پیمایش درخت preorder , postorder , inorder را پیاده سازی کرده و برای درخت عبارت در فایل خروجی پیمایش های postfix , prefix , infix را چاپ کنید.عبارت ریاضی از فایل in.txt خوانده شده برای تمایز بین عملگر و عملوند یک فاصله space وجود دارد خروجی نیز در فایل out.txt ذخیره می شود؟
اینم کدی که براش زدم:
می شه لطفا بگید ایراد کار کجاست؟
صورت سوال : ساختار درخت دودویی را به صورت شی گرا پیاده سازی کرده سپس با استفاده از این ساختار درخت عبارت بسازید در نهایت الگوریتم پیمایش درخت preorder , postorder , inorder را پیاده سازی کرده و برای درخت عبارت در فایل خروجی پیمایش های postfix , prefix , infix را چاپ کنید.عبارت ریاضی از فایل in.txt خوانده شده برای تمایز بین عملگر و عملوند یک فاصله space وجود دارد خروجی نیز در فایل out.txt ذخیره می شود؟
اینم کدی که براش زدم:
کد:
#include <iostream>
#include <conio>
#include <fstream>
template <class Type> class BinaryTree;
template <class Type>
class node{
friend class BinaryTree <Type>;
private:
node (Type d):left(null),data(d),right(null){};
node *left;
Type data;
node *right;
};
template <class Type>
class BinaryTree{
private:
node <Type> *root;
void inorder (node<Type> *T);
void preorder(node<Type> *T);
void postorder (node<Type> *T);
int DelBinaryTree(BinaryTree<Type> *T);
public:
int insert (const Type x);
int Delete (const Type &x);
void inorder ();
void preorder();
void postorder ();
BinaryTree()
{root=null;};
~BinaryTree(){
DelBst(root);
}
void set(*T=0){
*root=*T;
set(*T);
}
void postorderEval(node<Type> *T);
void preorderEval (node<Type> *T);
int isOperand();
};
void inorder(node <Type> *T)
{
if (root==null) return;
inorder (root->left);
cout <<root->data<< "";
inorder (root->right);
}
void preorder(node *T)
{
if (root==null) return;
cout<<root->data<<"";
preorder (root->left);
preorder (root->right);
}
void postorder(node *T)
{
if (root==null) return;
postorder(root->left);
postorder(root->right);
cout<<root->data<<"";
}
void postorderEval (node *T)
{
if (T){
postoederEval (T->left);
postorderEval(T->right);
switch (T->data){
case '(':T->data=insert(s[i])
case '^':T->data=(T->left->data)^(T->right->data);
case '//':T->data=(T->left->data)/(T->right->data);
case '*':T->data=(T->left->data)*(T->right->data);
case '+':T->data=(T->left->data)+(T->right->data);
case '-':T->data=(T->left->data)-(T->right->data);
}
}
}
void preorderEval (node *T)
{
if(T){
switch (T->data){
case '(':T->data=insert(s[i])
case '^':T->data=(T->left->data)^(T->right->data);
case '//':T->data=(T->left->data)/(T->right->data);
case '*':T->data=(T->left->data)*(T->right->data);
case '+':T->data=(T->left->data)+(T->right->data);
case '-':T->data=(T->left->data)-(T->right->data);
}
preorderEval(T->left);
preorderEval(T->right);
}
}
int isOperand(char c)
{
char s[] = "0123456789";
for (int i = 0; s[i]; i++)
if (s[i] == c)
return 1;
return 0;
}
int insert(const Type x){
node *P=new node;
x=p->data;
return x;
}
int Delete(const Type &x){
if (T==null) return;
else
delete x;
}
int DelBinaryTree(BinaryTree<Type> *T){
if (T==null) return;
DelBinaryTree (T->left);
DelBinaryTree (T->right);
delete T;
}
void main()
{
ofstream f("in.txt");
f << "(((a\\b)-c)+(d*e)-(a*c))^d)" << endl;
f.close();
char s[1000], q[1000];
ifstream in("in.txt");
in >> s;
in.close();
postorderEval(s, p);
ofstream out("out.txt");
out << p;
out.close();
cout << p;
preorderEval(s, p);
ofstream out("out.txt");
out << p;
out.close();
cout << p;
getch();
}
آخرین ویرایش: