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

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

Восстановить пароль Регистрация
 
Kholmansky
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 9
17.12.2011, 01:22     Обход деревьев #1
Здравствуйте, мне нужно обойти два дерева и информацию из одного дерева перенести в другое.







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++
Есть у кого исходники 2-3-4 деревьев? C++
C++ Массив: Учащиеся участвовали в посадке деревьев. Сколько деревьев было посажено
C++ контейнеры STL и виды деревьев
C++ Сравнить структуру двух деревьев
турнирная сортировка деревьев C++
Разница между понятиями "Обход в прямом направлении" и "Итерационный прямой обход" C++
C++ Нужен совет по алгоритмам, обход бинарных деревьев

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

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

Текущее время: 12:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru