Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
#1

Бинарное Дерево(обход дерева) - C++

22.04.2010, 21:14. Просмотров 1793. Ответов 4
Метки нет (Все метки)

добрый вечер всем!)
в универе задали написать бинарное дерево со всеми видами обхода и т.п. я их написал..
но еще дали 1 вывод его надо написать рекурсией, я его никак не могу реализовать.
поясняю:
например дерево:
7
/ \
6 8
надо вывести его в таком виде, но еще это дерево должно лежать на левом боку(просто нарисовать так трудно, написал так):

7
/ \
6 8
/ \ / \
@ @ @ @
т.е есть там где NULL вывести "@";

struct tree_node{ int val; tree_node *left,*right;}; - элемент дерева.
вот что до чего я дошел, только без выводов @..а просто дерево лежащее на левом боку.
C++
1
2
3
4
5
6
7
8
void print(tree_node *root,int b){  
   if (root!=NULL)
  { print (root->right,b+1); 
    for (int i=1; i<=b; i++) cout<<"  "; 
    cout<<root->val<<endl; 
    print (root->left,b+1);
    }
}
если кто нибудь знает как это реализовать или поменяй мой print, пож-та скажите.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 21:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарное Дерево(обход дерева) (C++):

Бинарное дерево. Обход бинарного дерева (симметрический, прямой и обратный) - C++
Привет всем! Мне надо в курсовой работе написать программу, которая строит бинарное дерево (по вводимым значениям) и потом обходит это...

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой - C++
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Бинарное дерево в бинарном дереве: обход - C++
Есть шаблонный класс бинарного дерева, описанный ниже. Все методы рабочие. template &lt;class T&gt; class Tree { public: Tree();...

Бинарное дерево, расчёт суммы элементов дерева - C++
Задание: Программа должна обрабатывать бинарное дерево, содержащее целые числа. Дополнительные функции: расчёт суммы элементов дерева.

Бинарное дерево С++ (функция проверки внутренних узлов дерева) - C++
Здравствуйте. Помогите пожалуйста. Надо написать функцию,проверяющую есть ли в дереве внутренний узел, у которого только один потомок. ...

Бинарное дерево (передать адрес первого (корневого) элемента дерева в метод) - C++
Добрый день! Такой вопрос: Реализован шаблонный класс - бинарное дерево. Создан метод прохождения по элементам с помощью рекурсии. Не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Джирайя
3 / 3 / 0
Регистрация: 20.04.2010
Сообщений: 64
22.04.2010, 22:00 #2
C++
1
2
3
4
5
6
7
8
9
void TreeOut( NodePtr t, int level )
{ int tab = 5;
if (t == NULL) cout <<"Дерево пусто ! \n";
 else
{ if (t->r != NULL) TreeOut(t->r, level+1);   
   cout <<setw(tab*level) <<t->key <<endl;
       if (t->l != NULL) TreeOut(t->l, level+1);           
}
}
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
23.04.2010, 12:38  [ТС] #3
спасибо, но я кое-что не понял, не могли вы бы объяснить пару моментов:
что за функция setw()?

а то без нее программа работает так же как моя.
спасибо за то ,что очень быстро ответили
mirso
525 / 343 / 17
Регистрация: 05.04.2009
Сообщений: 709
23.04.2010, 13:01 #4
Цитата Сообщение от lolers Посмотреть сообщение
что за функция setw()?
lolers,
запусти вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <iomanip>
 
int main()//=========================================================
{
    std::cout << std::setw(10) << "setw" << std::endl;
    std::cout << std::setw( 9) << "setw" << std::endl;
    std::cout << std::setw( 5) << "setw" << std::endl;
    std::cout << std::setw( 4) << "setw" << std::endl;
    std::cout                  << "setw" << std::endl;
 
    return 0;
}//==================================================================
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
23.04.2010, 19:29  [ТС] #5
спасибо..
Джирайя, чем моя программа отличается от вашей?( ну кроме функции setw..)
она выводит тоже самое что и моя((

7
/ \
6 8
/ \ / \
@ @ @ @
надо вывести это дерево лежащее на левом боку, и если левое и правые потомки ==NULL, он выводит "@" на тех местах где нулл)

Добавлено через 6 часов 21 минуту
все спасибо, я сам сделал=)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2010, 19:29
Привет! Вот еще темы с ответами:

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру - C++
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Постройте и выведите на экран бинарное дерево. Найдите произведение элементов дерева, находящихся на уровне u - C++
Я построил дерево вот код # include &lt;iostream&gt; # include &lt;conio.h&gt; #include &lt;clocale&gt; using namespace std; //Наша структура ...

обход дерева - C++
struct SAcson { int l,c; // строка, столбец float x; // заряд bool e; // возбуждающий или тормозящий }; struct SSinapc { ...

Обход дерева - C++
Всем доброе время суток. Не могу нормально обойти дерево и просмотреть введённое, по всей видимости, возможно я неправильно поставил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.04.2010, 19:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru