BST na klasach

0

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;

}

 
0

nie chodzi mi o przegladniecie kodu funkcji, bo to dziala (juz to kiedys pisalem w C)

chodzi mi o to czy ten interfejs klas wyglada ok ? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1