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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать программу, создающую два потока, которые выполняются в одном адресном пространстве (в одном процессе) http://www.cyberforum.ru/cpp-beginners/thread409431.html
Здравствуйте! Есть задание: Написать программу, создающую два потока, которые выполняются в одном адресном пространстве (в одном процессе). Их разделяемый ресурс - целочисленный массив, который содержит данные совместного использования. Потоки должны обрабатывать массив поочередно. Использовать критическую секцию для синхронизации. Пример обработки массива: нахождение суммы всех элементов,...
C++ Преобразование строчных букв в прописные Помогите с программой: Написать программу, которая во введённой с клавиатуры строке преобразует строчные буквы русского алфавита в прописные за счёт использования двумерной матрицы соответствия T. http://www.cyberforum.ru/cpp-beginners/thread409424.html
C++ Игра Лабиринт
Пишу простейшую игру лабиринт.Поле загружаю из файла, курсор двигаю клавишами через SetConsoleCursorPosition, как сделать ограничение на движение курсора в те места где некие "стены" моего лабиринта?
SAve method C++
Доброго времени суток всем! Разрабатываю программу MDI приложения в Visual C++. Возникли сложности с сохранением, а точнее с методом Save, то есть без вызова SaveFileDialog. Подскажите как примерно можно реализовать метод. Заранее спасибо
C++ ребят помогите пожалуйста.СРОЧНО http://www.cyberforum.ru/cpp-beginners/thread409408.html
:kiss: прогрммка: Вводим с клавиатуры арифметическое выражение типа 1+45+(4-7)... На выходе ответ. Ребят ну пожалуйста.очень надо.
C++ Абстрактный базовый класс(задача) Дано задание :Определите абстрактный базовый класс Person,содержащий поля "пол","возраст". Затем определите производный класс Student, описывающий типичного студента (курс, группа, номер в журнале). В заключении выведите из класса student класс GradStudent, описывающий типичного аспиранта (средний балл). Проинициализируйте через конструктор поля классов данными.Объявите экземпляр класса... подробнее

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







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;
}
//---------------------------------------


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