|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.05.2013, 21:40 | #1 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 12
|
двоичное дерево
как пронумеровать вершины бинарного дерева? Думаю надо сделать обход в ширину.
Код:
Последний раз редактировалось Stilet; 21.05.2013 в 08:31. |
20.05.2013, 23:20 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Используйте тег CODE для оформления кода:
Код:
Один из способов его устранения - сделать так, чтобы num_tree возвращала последний присвоенный номер в обойдённом дереве. Тогда: Код:
|
21.05.2013, 13:51 | #3 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 12
|
Исправил код, все нумерует. Но мне бы хотелось, чтобы корень нумеровался 1, потом на следующем уровне 2,3, затем 4,5,6,7 и т.д. В общем пронумеровать по горизонтали. Потому что мне нужно еще поменять вершины: четного отца с четным сыном.
|
21.05.2013, 14:00 | #4 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
|
|
21.05.2013, 14:06 | #5 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 12
|
Спасибо. Попробую.
|
21.05.2013, 14:25 | #6 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 12
|
Можете, пожайлуста, поправить код.
#include "stdafx.h" #include <iostream> using namespace std; struct Node { int d; Node *left; Node *right; int f; }; Node * first(int d); Node * search_insert(Node *root, int d); void print_tree(Node *root, int l); int num_tree(Node *root, int l, int f); int _tmain(int argc, _TCHAR* argv[]) { int b[] = {10,25,20,6,21,8,1,30,35}; Node *root = first(b[0]); for (int i=1; i<9; i++) search_insert (root, b[i]); print_tree(root, 0); num_tree(root, 0, 0); getchar();getchar(); return 0; } //Формирование первого элемента в дееве Node *first (int d) { Node *pv = new Node; pv->d = d; pv->left = 0; pv->right = 0; return pv; } //поиск с включением Node * search_insert(Node *root,int d){ 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->left = 0; pnew->right = 0; if (d < prev->d) //Присоединение к левому поддереву предка; 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 <<" "; cout << p->d << endl; print_tree(p->right, level + 1); } } // нумерация вершинвозвращается //начинается с f+1, последний присвоенный номер int num_tree(Node *p,int l, int f) { if (p){ f++; num_tree(p->left,l+1, f) + 1; for (int i=0; i<l+1; i++) cout <<" "; cout << f++ << ","<<p->d << endl; //присваиваем корню num_tree(p->right, l+1,f); } return f; } |
21.05.2013, 14:50 | #7 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
0) Пожалуйста, оформляйте код тегом CODE.
1) Почему Вы считаете, что код должен быть "поправлен"? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
двоичное дерево | apostol584 | Помощь студентам | 0 | 29.11.2012 09:19 |
Двоичное дерево | Бендер | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 21.12.2010 20:48 |
Двоичное дерево (С++) | Dead Romantic | Помощь студентам | 0 | 30.05.2010 23:52 |
Двоичное дерево | Jasper92 | Общие вопросы C/C++ | 1 | 18.04.2010 13:27 |
Двоичное дерево на си++ | fesked | Помощь студентам | 0 | 22.10.2009 23:44 |