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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 16:07   #1
mtg
Новичок
Джуниор
 
Регистрация: 01.12.2010
Сообщений: 2
Вопрос Поиск двоичного дерева

Здравствуйте, не могу разобраться с поиском заданного значения вершины дерева и вывести путь к ней.
пример вида пути ЛЛПППЛ, где Л -переход к левому поддереву, П- к правому.
вот мой код

Код:
#include <iostream.h>
#include <windows.h>
char Newt[256];
char*Rus(char*Text){
CharToOem(Text,Newt);
return Newt;}
struct Node{
int n;

Node *left;
Node *right;
};
Node * first (int n);
Node * search_insert(Node *root, int n);
void print_tree(Node *root, int i);

int main(){
	int n[]={10, 25, 20, 6, 21, 8, 1, 30};


cout<<Rus("Элементы дерева:10, 25, 20, 6, 21, 8, 1, 30")<<endl;
cout<<endl;
Node *root = first(n[0]);
for (int i=1; i<8; i++)

search_insert( root, n[i]);
print_tree(root, 0);
return 0;
}
 //Формирование первого элемента дерева
Node * first(int n){
Node *pv = new Node;
pv->n = n;
pv->left = 0;
pv->right = 0;
return pv;
}

// Поиск с включением
Node * search_insert(Node *root, int n){
Node *pv = root, *prev;
bool found = false;
while (pv && !found){
prev = pv;
if (n== pv->n)
 found =true;
else if (n<pv->n) 
pv=pv->left;
else pv=pv->right;
}

if (found) return pv;
// Создание нового узла:
Node *pnew = new Node;
pnew->n=n;
pnew->left = 0;
pnew->right = 0;
if (n< prev->n)
// Присоединение к левому поддереву предка:
prev->left = pnew;
else
// Присоединение к правому поддереву предка:
prev->right = pnew;
return pnew;
} 

//Обход дерева
void print_tree(Node *p, int level){
if (p){
print_tree(p->left, level +1); // вывод левого поддерева
for (int i=0; i<level; i++)

cout<<Rus("    ");
cout<<p->n<<endl;
//вывод корня поддерева
print_tree(p->right, level +1); // вывод правого поддерева
}
}
а здесь что получается:

Код:
Элементы дерева:10, 25, 20, 6, 21, 8, 1, 30

        1
    6
        8
10
        20
            21
    25
        30
Press any key to continue
как задать значение вершины и вывести путь к ней?
заранее спасибо!

Последний раз редактировалось mtg; 01.12.2010 в 21:13.
mtg вне форума Ответить с цитированием
Старый 01.12.2010, 17:30   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Для оформления кода есть специальный тег CODE (значок # над окном редактирования сообщения). Дооформите по-человечески, и тогда можно будет поразбираться, код хотя бы читабельнее станет.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.12.2010, 21:15   #3
mtg
Новичок
Джуниор
 
Регистрация: 01.12.2010
Сообщений: 2
По умолчанию

Вот теперь исправили
mtg вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно организовать непростой шаблон двоичного дерева? nowaalex Общие вопросы C/C++ 10 02.12.2010 02:47
Обход двоичного дерева слева Дядя Тёма Фриланс 2 22.06.2010 17:02
Обход двоичного дерева слева Дядя Тёма Помощь студентам 0 05.06.2010 18:25
Обход двоичного дерева F1nk Помощь студентам 0 03.06.2010 17:51
Поиск суммы элементов дерева Sparky Помощь студентам 1 07.03.2010 16:12