Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Visual C++]Обход дерева в прямом порядке, помогите реализовать!!! 
:(
    Опции темы
lenatitova1
Дата 11.5.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Помогите, пожалуйста исправить ошибки, так чтобы одход дерева был в обратном порядке, используя массивы. Мой код ошибок не выдает, но обход получается неправильный... Я запуталась в этих индексах и циклах.
Дерева выглядит примерно так            0
                                                           1       2
                                                         3  4    5
                                                            6 7  8
А мой код на Visual C++
    

#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

struct Tree
{
    int contents;
    int left;
    int right;
};

int _tmain(int argc, _TCHAR* argv[])
{
    Tree a [10];
    int b [10];
    int i, k, j, l, n;
    
    for (i = 1; i < 10; i++)
    {
        a [i].left = -1;
        a [i].right = -1;
    }

    a [0].left = 1;
    a [0].right = 2;
    
    a [1].left = 3;
    a [1].right = 4;

    a [2].left = 0;
    a [2].right = 5;

    a [3].left = 0;
    a [3].right = 0;

    a [4].left = 6;
    a [4].right = 7;

    a [5].left = 0;
    a [5].right = 8;
    
    a [6].left = 0;
    a [6].right = 0;

    a [7].left = 0;
    a [7].right = 0;

    a [8].left = 0;
    a [8].right = 0;

    for (i = 0; i <= 9; i++)
    {
        cout << i + 1 << " " << a [i].left << " " << a [i].right << endl;
    }
    cout << endl << endl;

    i = 0;
    k = 0;
    b [k] = -1;

    while (a [i].left > 0)
        {
            if (a [i].left > 0)
            {
                b [k] = a [i].left;
            }
            i = a [i].left;
        }
    if (b [k] == -1)
    {
        //cout << "%";
        a [i].left = 11;
        b [k] = a [i].left;
    }


    j = 0;
    i = -1;
    for (j = 0; j < 10; j++)
    for (i = 0; i < 10; i++)
    {
        if ((a [i].left == b [k]) || (a [i].right == b [k]))
        {
        //    cout << " !" << i << "! ";
                
            if (b [k] > 0)

            if ((a [i].right == 0) || (a [i].right == b [k]))
            {
                //спускаемся вниз
            //    cout << "down";
                //if (a [i].right == b [k]) cout << "@";
                k = k + 1;
                b [k] = i;
            //    cout << b [k] << " ";
            }
            else
            {
                //находим "левого"
            //    cout << "left";
                k = k + 1;
                l = a [i].right;
                for (n = 1; n < 10; n++)
                    if ((a [l].left == 0) && (a [l].right > 0))
                    {
                        l = a [l].right;
                        //cout << "$";
                    }

                if ((a [l].left == 0) && (a [l].right == 0))
                {
                    b [k] = l;
            //        cout << b [k] << " ";
                }
                else
                {
            //    cout << "#";
                    while (a [l].left > 0)
                    {
                        if (a [l].left > 0)
                        {
                            b [k] = a [l].left;
                        }
                        l = a [l].left;
                    }
            //        cout << b [k] << " ";
                }
            }
        }
    }
    


    if (a [0].left == 11) for (i = 8; i >=0; i--) if (b [i] >= 0) cout << b [i] << " ";
    if (a [0].left != 11) for (i = 9; i >=0; i--) if (b [i] >= 0) cout << b [i] << " ";
    cout << endl << endl;
    _getch ();
    return 0;
}

   
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0379 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.