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

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

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

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

28.12.2010, 14:45. Просмотров 4043. Ответов 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;
    }
}
Так вот: проблема вся в том, что метод копирования дерева корректно не работает. Теоретически все вроде верно, находил кучу алгоритмов и примеров решения, все сходится. Но на самом деле - не создает копию дерева. Прогонял через отладчик - тоже ничего не нашел. В чем может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2010, 14:45     Копирование бинарного дерева
Посмотрите здесь:

Балансировка бинарного дерева - C++
Попалась одна на вид простая задача. Код написал, но не проходит 10 тестов из 40. Лидеру команды "Отбой" на День Рождения подарили...

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

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

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

Запись бинарного дерева - C++
Всем привет! Нужно записать следующий массив (вверху картинки) в бинарное дерево, которое имеет структуру, которая на картинке во...

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

Реализация бинарного дерева С++ - C++
Доброго времени суток, уважаемые форумчане. Возник вопрос по реализации бинарного дерева на С++, а именно с методом удаления элемента в...

Прошивка бинарного дерева на С++ - C++
Уважаемые программисты! Может у кого то есть опыт по написанию программы по прошивке бинарного дерева на С++ или подскажет по какому...

Итератор дерева бинарного поиска - C++
Если у нас в качестве коллекции выступают вектора, очереди, стеки и т.п. то там вроде бы всё понятно инкремент, декремент итератора...

Распечатка бинарного дерева поиска - C++
Много где висит функция void print(int deep, ptree p) { if(p) { print(deep + 1, p->l); for ( int i = 0; i < deep; i ++...

Класс для бинарного дерева - C++
Здравствуйте! Помогите, пожалуйста, я не вижу ошибок и не понимаю, почему программа не видит меню, не работает так, как нужно( Общее...

Исправить код бинарного дерева - C++
#include <stdlib.h> #include <iostream> struct uzel { int key;//хранится в вершине ключ-значение struct uzel...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kukuruku310
197 / 184 / 7
Регистрация: 14.02.2010
Сообщений: 539
29.12.2010, 00:30     Копирование бинарного дерева #2
А где у Вас вообще копирование? Я так понимаю, что скопировать надо не только поле ID, но и левых/правых потомков, а у Вас вообще нигде нет присваивания элементам right и left чего-то кроме нуля. Да, честно говоря, даже присваивания ID не заметил, т.к. тело Вашего конструктора узла не приведено. Или приведен как-то непонятно усеченный код, или то, что написано вообще неработоспособно.
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.: Просто решение то было найдено другим путем, но все же интересно, как это возможно осуществить именно этим методом.
Надеюсь на Вашу помощь.
kukuruku310
197 / 184 / 7
Регистрация: 14.02.2010
Сообщений: 539
29.12.2010, 18:38     Копирование бинарного дерева #4
Так я себе это представляю
Млин, не то подцепил, как удалить не знаю, короче Ваш - tree.rar
Вложения
Тип файла: rar 123.RAR (4.0 Кб, 61 просмотров)
Тип файла: rar Tree.rar (3.3 Кб, 397 просмотров)
Yandex
Объявления
29.12.2010, 18:38     Копирование бинарного дерева
Ответ Создать тему
Опции темы

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