moglby ktos obejrzec moj kod i go ocenic -oczywiscie jesli ma troche czasu. ;)
z gory zaznaczam jestem licealistą i w wielu miejscach moglem porobic glupie bledy - wiec prosze, jesli mozna bez hate'u. jesli widzisz co jest zle to pisz wprost, chcialbym wiedziec co napisalem zle, gdzie sa braki w mojej wiedzy, itd.
bede wdzieczny za kazdy konstruktywny komentarz ;)
#include <iostream>
#include <vector>
using namespace std;
struct tx
{
string text;
int key;
tx()
{
text="";
key=0;
}
tx(string t)
{
text=t;
key=0;
for(int i=0;i<text.length();i++)
{
key+=text[i];
}
}
};
template <class T>
class BST_tree {
private:
struct node
{
node *p;
node *left;
node *right;
T value;
int key;
node(T val,int k=0) : p(0), left(0), right(0)
{
key=k;
value=val;
}
};
node *root;
void inorder_tree_walk(node *x)
{
if(x!=0)
{
inorder_tree_walk((*x).left);
cout<<(*x).key<<" ";
inorder_tree_walk((*x).right);
}
}
void preorder_tree_walk(node *x)
{
if(x!=0)
{
cout<<(*x).key<<" ";
inorder_tree_walk((*x).left);
inorder_tree_walk((*x).right);
}
}
void postorder_tree_walk(node *x)
{
if(x!=0)
{
inorder_tree_walk((*x).left);
inorder_tree_walk((*x).right);
cout<<(*x).key<<" ";
}
}
node *tree_search(int k,node *x)
{
while(x!=0 && k!=(*x).key)
{
if(k<(*x).key)
x=(*x).left;
else
x=(*x).right;
}
return x;
}
node *tree_minimum(node *x)
{
while((*x).left!=0)
x=((*x).left);
return x;
}
node *tree_maximum(node *x)
{
while((*x).right!=0)
x=((*x).right);
return x;
}
node *tree_successor(node *x)
{
if((*x).right!=0)
return tree_minimum((*x).right);
node *y;
y=(*x).p;
while(y!=0 && x==(*y).right)
{
x=y;
y=(*y).p;
}
return y;
}
node *tree_predecessor(node *x)
{
if((*x).left!=0)
return tree_maximum((*x).left);
node *y;
y=(*x).p;
while(y!=0 && x==(*y).left)
{
x=y;
y=(*y).p;
}
return y;
}
void tree_insert(node *z)
{
node *y;
y=0;
node *x;
x=root;
while(x!=0)
{
y=x;
if((*z).key<(*x).key)
x=(*x).left;
else
x=(*x).right;
}
(*z).p=y;
if(y==0)
{
root=z;
}
else if((*z).key<(*y).key)
(*y).left=z;
else
(*y).right=z;
}
public:
BST_tree()
{
root=0;
}
void inorder_tree_walk()
{
inorder_tree_walk(root);
}
void postorder_tree_walk()
{
postorder_tree_walk(root);
}
void preorder_tree_walk()
{
preorder_tree_walk(root);
}
T tree_search(int key)
{
node *x;
x=tree_search(key,root);
return (*x).value;
}
T tree_minimum()
{
node *x;
x=tree_minimum(root);
return (*x).T;
}
T tree_maximum()
{
node *x;
x=tree_maximum(root);
return (*x).T;
}
T tree_successor(int key)
{
node *x;
x=tree_successor(tree_search(key));
return (*x).T;
}
T tree_predecessor(int key)
{
node *x;
x=tree_predecessor(tree_search(key));
return (*x).T;
}
void tree_insert(T nw,int key=0)
{
node z(nw,key);
node *x;
x=&z;
tree_insert(x);
}
};
int main()
{
BST_tree<tx>Tree;
tx a("aaa");
tx b("bbb");
tx c("ccc");
tx d("ddd");
tx e("eee");
tx f("fff");
tx g("ggg");
tx h("hhh");
Tree.tree_insert(a,a.key);
Tree.tree_insert(b,b.key);
Tree.tree_insert(c,c.key);
Tree.tree_insert(d,d.key);
Tree.tree_insert(e,e.key);
Tree.tree_insert(f,f.key);
Tree.tree_insert(g,g.key);
Tree.tree_insert(h,h.key);
tx x;
x=Tree.tree_search(443);
cout<<x.key<<x.text;
Tree.preorder_tree_walk();
return 0;
}
w mainie gdy uruchamiam tree_search to wywala mi jakies krzaczki w konsoli, a preorder_tree_walk wywala mi blad.
z gory dzieki za pomoc ;)