Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2012, 15:55   #1
vadiprog
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 96
По умолчанию Бинарное дерево поиска С++

Вставить новый элемент в бинарное дерево поиска.
vadiprog вне форума Ответить с цитированием
Старый 06.05.2012, 21:47   #2
vadiprog
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 96
По умолчанию

Вот мой код, который считает количество веток к даному элементу


Код:
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;

class BinarySearchTree{
    private:
        struct tree_node{
           tree_node* left;
           tree_node* right;
           char data;
        };
        tree_node* root;
    
    public:
        BinarySearchTree(){
           root = NULL;
        }       
        bool isEmpty() const { return root == NULL; }
        void print_preorder();
        void preorder(tree_node*);

        void search(char);
        void insert(char);
};

void BinarySearchTree::insert(char d){
    tree_node* t = new tree_node;
    tree_node* parent;
    t->data = d;
    t->left = NULL;
    t->right = NULL;
    parent = NULL;    
    if(isEmpty()) root = t;
    else{
        tree_node* curr;
        curr = root;
        while(curr){
            parent = curr;
            if(t->data > curr->data) 
               curr = curr->right;
            else 
               curr = curr->left;
        }
        if(t->data < parent->data)
           parent->left = t;
        else
           parent->right = t;
    }
}

void BinarySearchTree::search(char d){
    bool found = false;
    if(isEmpty()){
        cout << "This Tree is empty!" << endl;
        return;
    }    
    tree_node* curr;
    tree_node* parent;
    curr = root; 
    int count(0);
    while(curr != NULL){
         if(curr->data == d){
            found = true;
            cout << count+1;
            break;
         }
         else{
             count++;
             parent = curr;
             if(d > curr->data) 
                curr = curr->right;
             else 
                curr = curr->left;
         }
    }
    if(!found){
        cout << "NO" << endl;
        return;
    }
}


void BinarySearchTree::print_preorder(){
    preorder(root);
}

void BinarySearchTree::preorder(tree_node* p){
    if(p != NULL)
    {
        cout << " " << p->data << " ";
        if(p->left) 
            preorder(p->left);
        if(p->right) 
            preorder(p->right);
    }
    else return;
}


int main(){
    BinarySearchTree b;
    char ch;
    for (int i = 0; i < 10; i++){
        b.insert(char(rand()% 25 +97));
    }
    b.print_preorder();
    cout << endl;
    char a;
    cout << "Vvedit znachennia, jake treba znaiti:\n"; 
    cin >> a;
    b.search(a);
    getch();
}
vadiprog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево поиска Orli Общие вопросы C/C++ 1 15.12.2011 21:27
Бинарное дерево DTroy Visual C++ 1 22.11.2011 21:09
бинарное дерево Lucefer2007 Общие вопросы C/C++ 0 17.04.2011 14:31
Бинарное дерево. amsask Помощь студентам 1 29.04.2010 21:25