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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.86
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
#1

Копирование бинарного дерева - C++

28.12.2010, 14:45. Просмотров 4108. Ответов 3
Метки нет (Все метки)

Имеется бинарное дерево типа
C++
1
2
3
4
5
6
7
8
9
class TreeNode 
{
public:
    TreeNode(); //конструктор
    virtual ~TreeNode();    //деструктор
    TreeNode  *left;    //указатель на левое поддерево
    TreeNode  *right;   //указатель на правое поддерево
    int data;   //информационное поле
};
Также имеется класс для работы с деревом
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
class SearchTree
{
public:
    SearchTree();   //конструктор по умолчанию
    ~SearchTree();  //деструктор
    TreeNode* CreateNode(int val);  //создание элемента (листка) дерева
    void Copy(TreeNode*  src, TreeNode* tg);    //копирование одного дерева в другое (функций 
    TreeNode *root; //указатель на корень дерева
};
 
//создание нового элемента дерева
TreeNode* SearchTree::CreateNode(int val)
{
    TreeNode* nd = new TreeNode(val);
    return nd;
}
 
void SearchTree::Copy(TreeNode* src, TreeNode* tg)
{
    if(src == NULL)
        tg = NULL;
    //проход, пока исходное дерево не достигло конца
    if (src != NULL) 
    {
        //создание нового элемента дерева
        tg = CreateNode(src->data);
        if(src->left != NULL)
        {
            Copy(src->left,tg->left);
        }
        else
            tg->left = NULL;
        
        if(src->right != NULL)
        {
            Copy(src->right,tg->right);
        }
        else
            tg->right = NULL;
    }
}
Так вот: проблема вся в том, что метод копирования дерева корректно не работает. Теоретически все вроде верно, находил кучу алгоритмов и примеров решения, все сходится. Но на самом деле - не создает копию дерева. Прогонял через отладчик - тоже ничего не нашел. В чем может быть проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2010, 14:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование бинарного дерева (C++):

Запись бинарного дерева в файл и восстановление из него этого дерева - C++
Задача такая: есть бинарное дерево. Каждый элемент дерева содержит 3 указателя - 1 указатель на структуру с данными, 2 и 3й указатель на...

Написать шаблон бинарного дерева с функцией распечатки дерева - C++
Не понимаю, что от меня хотят. Дано такое задание: Написать шаблон бинарного дерева с функцией распечатки дерева *(+(d,e),c) в виде...

Построение бинарного дерева на основе не бинарного - C++
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще...

Создание бинарного дерева из бинарного файла - C++
struct Bin { string name; string city; int players; int score; }; void ReadFromBin(Point*& Tree) { Bin q;

Вывод бинарного дерева на экран в виде "дерева" - C++
основная задача: подсчет количества листьев. проблема: при просмотре хочу выводить бин. дерево, в красивом виде, возможно использование...

Шаблон бинарного дерева - C++
Здравствуйте. Есть одна проблема и не получается её решить, надеюсь вы поможите. Делаю шаблон бинарного дерева. По сути сделал только...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kukuruku310
197 / 184 / 7
Регистрация: 14.02.2010
Сообщений: 539
29.12.2010, 00:30 #2
А где у Вас вообще копирование? Я так понимаю, что скопировать надо не только поле ID, но и левых/правых потомков, а у Вас вообще нигде нет присваивания элементам right и left чего-то кроме нуля. Да, честно говоря, даже присваивания ID не заметил, т.к. тело Вашего конструктора узла не приведено. Или приведен как-то непонятно усеченный код, или то, что написано вообще неработоспособно.
1
patriot2008
72 / 72 / 4
Регистрация: 04.12.2008
Сообщений: 463
29.12.2010, 01:01  [ТС] #3
Точно! Нет присваивания поддеревьям, которые копируем. А не подскажите, как это правильно организовать, чтобы также все рекурсивно осталось?

Вот само тело конструктора
C++
1
2
3
4
5
6
TreeNode::TreeNode( int d )
{
    data=d;
    left=NULL;
    right = NULL;
}
P.S.: Просто решение то было найдено другим путем, но все же интересно, как это возможно осуществить именно этим методом.
Надеюсь на Вашу помощь.
0
kukuruku310
197 / 184 / 7
Регистрация: 14.02.2010
Сообщений: 539
29.12.2010, 18:38 #4
Так я себе это представляю
Млин, не то подцепил, как удалить не знаю, короче Ваш - tree.rar
1
Вложения
Тип файла: rar 123.RAR (4.0 Кб, 62 просмотров)
Тип файла: rar Tree.rar (3.3 Кб, 400 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 18:38
Привет! Вот еще темы с ответами:

Глубина бинарного дерева - C++
На одном сайте, вроде как сурьезном читаю про деревья. столкнулся вот с таким примером вычисления глубины дерева // Эта функция...

Создание бинарного дерева - C++
Есть задания и я знаю как их сделать, но не понимаю, как создать и вывести на экран бинарное дерево. Подскажите пожалуйста, ссылки, коды,...

Удаление из бинарного дерева - C++
Здравствуйте! Помогите с удалением узла из бинарного дерева. Номер узла вводится пользователем #include "stdafx.h" #include...

Высота бинарного дерева - C++
Надо найти высоту бинарного дерева.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.12.2010, 18:38
Ответ Создать тему
Опции темы

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