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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прямой обход дерева, помогите разобраться 
:(
    Опции темы
mariana
Дата 13.6.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

/*Реализовать дерево математического выражения с помощью указателей.
 Сделать его обход прямым методом. Подсчитать количество узлов дерева.*/

#include "stdafx.h"
#include<iostream.h>
struct El
{char val;
El *pred, *right,*left;
};
El *E;
bool x,y;

void Obhod(El *E)
{   if(!y) 
    cout<<E->val<<"  "; 
    
    if(E->left!=NULL)
    {x=false; 
    E=E->left;
    Obhod(E);}
    
    if(E->right!=NULL) 
    {x=true; 
    E=E->right;
    Obhod(E);} 
    
    if((!x)&&(E->pred!=NULL)&&(E->pred->right!=NULL)) 
    {x=true; 
    E=E->pred->right; 
    Obhod(E);} 
    
    if(x&&(E->pred->pred==NULL)) 
        y=true;
    
    if(x&&(E->pred!=NULL)&&(E->pred->pred!=NULL)&&(E->pred->pred->right!=NULL)) 
    {x=true; 
    E=E->pred->pred->right; 
    Obhod(E);};
}

void main()
{
    //создание дерева выражения ((а+b)*c)^2
    E=new El;
    E->pred=NULL;
    E->val='^';
    E->right=new El;
    E->right->val='2';
    E->right->pred=E;
    E->right->left=NULL;
    E->right->right=NULL;
    E->left=new El;
    E->left->val='*';
    E->left->pred=E;
    E=E->left;
    E->right=new El;
    E->right->val='c';
    E->right->pred=E;
    E->right->right=NULL;
    E->right->left=NULL;
    E->left=new El;
    E->left->val='+';
    E->left->pred=E;
    E=E->left;
    E->left=new El;
    E->left->val='a';
    E->left->pred=E;
    E->left->left=NULL;
    E->left->right=NULL;
    E->right=new El;
    E->right->val='b';
    E->right->pred=E;
    E->right->left=NULL;
    E->right->right=NULL;
while(E->pred!=NULL)
E=E->pred;    
Obhod(E);
}


помогите разобраться зачем нужны логические переменные x и y?? 
PM MAIL   Вверх
Prehistorik
Дата 13.6.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



дВА вопроса.

Почему код не форматирован и названия переменных взяты неговорящие... Очень трудно разбираться.

Но, по-моему, это немного изворащённый способ поиска в глубину.... 
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
MAKCim
Дата 13.6.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

void recurse(node* node_)
{
    if (node_)
    {
        // операция над текущим узлом
        recurse(node_->left);
        recurse(node_->right);
    }
}
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
pablo
Дата 13.6.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



С первого взгляда можно предположить следуюшее: Х показывает было ли движение по Х, т.е переход к следуюшему узлу дерева, или иными словами к своему младшему брату, Y же показывает, было ли обращение к отсовскому узлу, т.е движение по Y. 


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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