Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 01:27   #1
Kholmansky
 
Регистрация: 09.09.2011
Сообщений: 9
Вопрос Обход деревьев

помогите с функцией обхода двух деревьев, где из первого дерева будут копироваться значения во второе


Код:
#include <iostream>
#include <conio.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;
}
Kholmansky вне форума Ответить с цитированием
Старый 17.12.2011, 01:29   #2
Kholmansky
 
Регистрация: 09.09.2011
Сообщений: 9
По умолчанию

здесь первое дерево содержит в себе координаты, а второе просто элементы, мне нужно обойти сразу два дерева и во второе скопировать координаты из первого. Помогите пожалуйста, я уже и не знаю как придумать
Kholmansky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обход деревьев NewNub Помощь студентам 2 07.12.2011 08:15
Обход бинарных деревьев noskovgleb C++ Builder 1 28.05.2011 20:03
Визуализатор деревьев Alekc1989 Помощь студентам 0 03.02.2011 11:02
Сравнение деревьев kaizer131 Общие вопросы Delphi 0 22.05.2010 10:00