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

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

Войти
Регистрация
Восстановить пароль
 
Kholmansky
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 9
#1

Обход деревьев - C++

17.12.2011, 01:22. Просмотров 508. Ответов 0
Метки нет (Все метки)

Здравствуйте, мне нужно обойти два дерева и информацию из одного дерева перенести в другое.







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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <conio.h>
#include<time.h>
using namespace std;
 
struct Node
{
    double d;         //Данные элемента
    double x;
    double y;
    Node *left;    //Ссылка на левое поддерево
    Node *right;   //Ссылка на правое поддерево
};
Node *first(double d, double x, double y);                    //Формирование первого элемента
Node *search_insert(Node *root, double d, double x, double y); //Поиск с включением
void print_tree(Node *root, int level);     //Обход дерева
//-------------------------------------------
void main()
{
    double x[]={400,200,600,100,300,500,700,50,150,250,350,450,550,650,750,25,75,125,175,225,275,325,375,425,475,525,575,625,675,725,775,12.5,37.5,62.5,87.5,112.5,137.5,162.5,187.5,212.5,237.5,262.5,287.5,312.5,337.5,362.5,387.5,412.5,437.5,462.5,487.5,512.5,537.5,562.5,587.5,612.5,637.5,662.5,687.5,712.5,737.5,762.5,787.5};
    int n=sizeof(x)/8;
    int *y=new int[n];
    for(int i=0;i<n;i++)
    {
        if (i==0) y[i]=1;
        if (i>0 && i<=2) y[i]=50;
        if (i>2 && i<=6) y[i]=100;
        if (i>6 && i<=18) y[i]=150;
        if (i>18 && i<=54) y[i]=200;
        if(i>54)y[i]=200;
    }
    Node *root = first(x[0],0,y[0]);    //Формируем корень дерева
    //Ищем место куда вставить и вставляем новые элементы
    for(int i = 1; i < n; i ++)
    {
        search_insert(root,x[i],0,y[i]);
    }
        
    double d[10] = {23,4,67,1,12,10,5,78,3,18};
    int n2=10;
    Node *root2 = first(d[0],0,0);
    for (int i = 0; i<n2; i++)
    {
        search_insert(root2,d[i],0,0);
    }
 
    getch();
}
 
//--------------------------------------------
//Формирование первого элемента
Node *first(double d,double x, double y)
{
    Node *pv = new Node;      //Создаём элемент
    pv -> d = d;  //Присваиваем значение элементу поля
    pv -> x = x;
    pv -> y = y;
    pv -> left = 0;           //Ссылка на левое поддерево равна NULL
    pv -> right = 0;          //Ссылка на правое поддерево равна NULL
    return pv;               //Возвращаем адрес элемента
}
 
//---------------------------------------------
 
 
//Поиск с включением
Node *search_insert(Node *root,double d,double x,double y)
{
    Node *pv = root, *prev;
    bool found = false;    
    while(pv&&!found)
    {
        prev = pv;                       
        if(d == pv -> d)found = true;        
        else if(d < pv -> d)pv = pv -> left;   
        else pv = pv -> right;             
    }
//---------------------------
 
    if(found)return pv;               
    //Создание нового узла
    Node *pnew = new Node;
    pnew -> d = d;
    pnew -> x = x;
    pnew -> y = y;
    pnew -> left = 0;
    pnew -> right = 0;
    if(d < prev -> d)
    //Присоединение к левому поддереву предка
    prev -> left = pnew;
    else 
    //присоединяем к правому поддереву предка
    prev -> right = pnew;
    return pnew;
}
//---------------------------------------


здесь первое дерево содержит в себе координаты, а второе элементы, мне нужно обойти сразу два дерева и во второе скопировать координаты из первого. Помогите пожалуйста, я уже и не знаю как придумать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 01:22     Обход деревьев
Посмотрите здесь:

Нужен совет по алгоритмам, обход бинарных деревьев - C++
Всем привет! Вопрос может показаться немного глупым но все же: есть тема курсача &quot;Обход бинарных деревьев методом перебора&quot; очень...

Реализация деревьев - C++
Я вот сделал простое дерево (максимально дочерних узлов в корне - 3). Теперь нужно доработать, чтобы были списки сыновей. Помогите...

Турнирная сортировка деревьев - C++
Здравствуйте, программа турнирная сортировка деревьев. Но проблема в том, что при компиляции выдает ошибку. Помогите, пожалуйста ...

Класс бинарных деревьев. Наследование - C++
Доброго времени суток! Имеется задание написать абстрактный класс бинарного дерева и класс рациональных чисел. От них отнаследовать классы...

Объединение 2-х бинарных деревьев в одно - C++
Необходима функция объединения 2-х бинарных сбалансированных деревьев в одно.

Определить, сколько посажено деревьев - C++
Учащиеся 8-х классов участвовали в посадке деревьев. 8-а посадил 100 деревьев, 8-б —122 дерева, 8-в — 98 деревьев, 8-г — 104 дерева, 8-д —...

Контейнеры STL и виды деревьев - C++
подскажите, или покажите где есть эта информация например я знаю, что контейнеры map и set реализованы через красно-черное дерево через...

Сравнить структуру двух деревьев - C++
Написать два варианта функции(с рекурсией и без). Даны два дерева,два указателя на корни. Функция возвращает логическое значение:если...

Итеративная функция сравнения деревьев - C++
Задание такое: Рекурсивно и итеративно описать логическую функцию, проверяющую на равенство деревья Т1 и Т2. Рекурсивная функция есть,...

Вычисление глубины деревьев(нужна подсказка) - C++
Есть вот такая процедура template &lt;class T&gt; void Depth (TreeNode&lt;T&gt; *t) { int depthLeft, depthRight, depthval; if (t ==...


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

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

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