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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2013, 21:17   #1
tzaf
Пользователь
 
Регистрация: 14.04.2013
Сообщений: 12
По умолчанию Бинарное дерево

Посмотрите, пожайлуста, как пронумеровать вершины бинарного дерева.
// бинарное дерево.cpp: определяет точку входа для консольного приложения.
//
#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);
void num_tree(Node *root, 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);
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);

}
}
// нумерация вершин
void num_tree(Node *p, int f)
{
f++;
if (p){
num_tree(p->left, f);
cout << f <<p->d << endl;
f++;
num_tree(p->right, f);
}
}
tzaf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево (С++) Артём Волжанкин Помощь студентам 3 05.08.2012 11:42
бинарное дерево NewNub Общие вопросы Delphi 1 05.12.2011 15:10
Бинарное дерево. amsask Помощь студентам 1 29.04.2010 21:25
Бинарное дерево) Svetlanka_ya Паскаль, Turbo Pascal, PascalABC.NET 1 17.04.2010 12:35
бинарное дерево СИ Anastasia.K Помощь студентам 0 31.10.2009 18:16