Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SMYH
2 / 2 / 0
Регистрация: 23.10.2013
Сообщений: 38
#1

Добавление элемента в двоичное дерево - C++

21.04.2014, 18:07. Просмотров 186. Ответов 0
Метки нет (Все метки)

bt.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <cstdlib>
#pragma once
 
class TreeNode{
    friend class SimpleTree;
    int data;
    TreeNode* left;
    TreeNode* right;
public:
    TreeNode(int value);
    ~TreeNode();
};
 
class SimpleTree{
private:
    void out(TreeNode* imRoot, int depth);
    void addio(TreeNode* imRoot, const int& value);
    TreeNode* root;
    
public:
    SimpleTree(int value);
    ~SimpleTree();
    void addRandomly(int value);
    void addInOrder(int value);
    void printOnSide();
};


bt.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "bt.h"
#include <cstdlib>
#include <iostream>
#include <ctime>
 
using std::cout;
using std::rand;
using std::srand;
using std::ctime;
using std::endl;
TreeNode::TreeNode(int value):
    data(value),
    left(NULL),
    right(NULL){}
 
TreeNode::~TreeNode(){
    if(left){
        delete left;
    }
    if(right){
        delete right;
    }
}
 
SimpleTree::SimpleTree(int value){
    root = new TreeNode(value);
}
 
SimpleTree::~SimpleTree(){
    if(root) delete root;
}
 
void SimpleTree::addRandomly(int value){
    bool headAndTail = rand()%2;
    TreeNode* newNode = new TreeNode(value);
 
    TreeNode* tmp = root;
 
    while(tmp!=NULL){
        headAndTail = rand()%2;
        if(headAndTail){
            tmp = tmp->left;
        }
        else{
            tmp = tmp->right;
        }
    }
    tmp = newNode;
}
 
void SimpleTree::printOnSide(){
    out(root,0);
}
 
void SimpleTree::out(TreeNode* imRoot, int depth){
    if(imRoot){
        out(imRoot->left, depth+1);
        for(int i = 0; i<depth;i++) cout<<" ";
        cout<<imRoot->data<<endl;
        out(imRoot->right, depth+1);
    }
}


Функция addRandomly() из SimpleTree, по задумке, должна случайно добавлять элемент в дерево. Для этого она случайно "шагает" от корня дерева, выбирая один из двух узлов, пока не найдет узел, указатель на который равен нулю. Затем выделяется память под этот узел, после этого значение указателя должно указывать на этот узел, но этого не происходит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 18:07     Добавление элемента в двоичное дерево
Посмотрите здесь:
Добавление элемента в бинарное дерево C++
Дерево поиска. добавление элемента C++
Бинарное дерево поиска (удаление, добавление элемента) C++
Добавление нового элемента в бинарное дерево поиска с вспомогательной функцией(без рекурсии) C++
Двоичное дерево C++
C++ Двоичное дерево
C++ Двоичное дерево
указатели. двоичное дерево C++
Двоичное дерево Хаффмана C++
Двоичное дерево поиска C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru