na razie to tylko zalazek, ale czy duch obiektowosci jest zachowany ? :D No i czy nie ma jakichs rzucajacych sie w oczy bledow, nieladnych zagran:D
myslalem o zawieraniu, ale skonczylo sie na klasie zagniezdzonej :)
plik deklaracji
#ifndef _BST_TREE_H
#define _BST_TREE_H
class BST_tree
{
private:
class Node
{
public:
int key;
Node *left;
Node *right;
Node *p;
void inorder_tree_walk(int level);
void node_out(int level);
};
protected:
Node *head;
public:
BST_tree(int k);
//BST_tree(const BST_tree& orig);
void do_inorder(int level=1)
{
Node *tmp =head;
tmp->inorder_tree_walk(level);
}
void tree_insert(int k);
//Node* tree_search(Node *temp, int k);
//Node* iterative_tree_search(Node *head, int k);
//Node* tree_minimum(Node* head);
//Node* tree_maximum(Node *head);
//Node* tree_succesor(Node *h);
//Node* tree_delete(Node *h, int k);
};
#endif /* _BST_TREE_H */
definicja
#include "BST_tree.h"
#include <iostream>
BST_tree::BST_tree(int k)
{
head = new Node;
head->key = k;
head->left = 0;
head->right = 0;
head->p = 0;
}
void BST_tree::tree_insert(int k)
{
Node *z = new Node;
z->key = k;
z->left = 0;
z->right = 0;
Node* y = 0;
Node* x = this->head;
while (x != 0)
{
y = x;
if (z->key < x->key)
x = x->left;
else
x = x->right;
}
z->p = y;
if (y == 0)
this->head = z;
else if (z->key < y->key)
y->left = z;
else
y->right = z;
}
void BST_tree::Node::inorder_tree_walk(int level)
{
if (this != 0)
{
this->left->inorder_tree_walk(level+1);
this->node_out(level);
this->right->inorder_tree_walk(level + 1);
}
}
void BST_tree::Node::node_out(int level)
{
for (int i = 1; i < level; ++i)
std::cout << " ";
std::cout << "adres: " <<(int*)this << " key: " << this->key << " left->" << (int*) this->left << " right->" << (int*) this->right<<std::endl;
}