Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.98/114: Рейтинг темы: голосов - 114, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
1

Вывод бинарного дерева

17.04.2010, 05:13. Просмотров 21766. Ответов 2
Метки нет (Все метки)

Как организовать вывод бинарного дерева?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2010, 05:13
Ответы с готовыми решениями:

Вывод бинарного дерева
Помогите пожалуйста, как вывести бинарное дерево в виде дерева? Само дерево и обход у меня есть, а...

Вывод бинарного дерева
Помогите, пожалуйста, с программой. Нужно вывести бинарное дерево так, как выводится дерево...

вывод бинарного дерева
Не могу понять в чем ошибка , функции описаны верно но на выводе хаотичные данные При вводе...

Реализация и вывод бинарного дерева
Помогите создать бинарное дерево и вывести его на экран по уровням. Заранее спасибо.

2
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.04.2010, 08:29 2
Лучший ответ Сообщение было отмечено как решение

Решение

Иногда полезно пользоваться поиском по форуму

1. Создание пустого дерева
2. Добавление элемента в дерево.
3. Удаление поддерева с заданной корневой вершиной.
4. Вывод структуры дерева на экран монитора.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include<iostream.h>
struct  node
{
  int Key;
  int Count;
  node *Left;
  node *Right;
};
 
class TREE
{
  private:
    node *Tree; //Указатель на корень дерева.
    void Search (int,node**);
  public:
    TREE() {Tree=NULL;}
    node** GetTree () {return &Tree;} //Получение вершины дерева.
    void BuildTree ();
    void CleanTree (node **);
    void ObhodEnd (node **);
    void ObhodLeft (node **);
    void ObhodBack (node **);
    void Vyvod (node**,int);
    int Height (node**);
};
 
void main ()
{
  TREE A;
 
  A.BuildTree ();
  cout<<"\nВывод дерева:\n";
  A.Vyvod (A.GetTree(),0);
  cout<<"\nВысота дерева:"<<A.Height(A.GetTree())<<endl;
  cout<<"\nЛевосторонний обход дерева: ";
  A.ObhodLeft (A.GetTree());
  cout<<"\nКонцевой обход дерева: "; A.ObhodEnd (A.GetTree());
  cout<<"\nОбратный обход дерева: "; A.ObhodBack (A.GetTree());
  A.CleanTree (A.GetTree());
}
 
void TREE::BuildTree ()
// Построение бинарного дерева (рекурсивный алгоритм).
// Tree - указатель на корень дерева.
{
  int el;
 
  cout<<"Вводите ключи вершин дерева ...\n";
  cin>>el;
  while  (el!=0)
  { Search (el,&Tree); cin>>el; }
}
 
void TREE::Search (int x,node **p)
//  Поиск вершины с ключом x в дереве со вставкой
//             (рекурсивный алгоритм).
// *p - указатель на корень дерева.
{
  if  (*p==NULL)
  {// Вершины в дереве нет; включить ее.
    *p = new(node);
    (**p).Key = x;     (**p).Count = 1;
    (**p).Left = NULL; (**p).Right = NULL; }
  else
    if  (x<(**p).Key) Search (x,&((**p).Left));
    else
      if  (x>(**p).Key) Search (x,&((**p).Right));
      else  (**p).Count = (**p).Count + 1;
}
 
void TREE::ObhodLeft (node **w)
//Левосторонний обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  {
    cout<<(**w).Key<<" ";
    ObhodLeft (&((**w).Left));
    ObhodLeft (&((**w).Right));
  }
}
 
void TREE::ObhodEnd (node **w)
//Концевой обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { ObhodEnd (&((**w).Left));
    ObhodEnd (&((**w).Right));
    cout<<(**w).Key<<" "; }
}
 
void TREE::ObhodBack (node **w)
//Обратный обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { ObhodBack (&((**w).Left));
    cout<<(**w).Key<<" ";
    ObhodBack (&((**w).Right)); }
}
 
void TREE::CleanTree (node **w)
//Очистка дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { CleanTree (&((**w).Left));
    CleanTree (&((**w).Right));
    delete *w; }
}
 
void TREE::Vyvod (node **w,int l)
//Изображение дерева *w на экране дисплея
//          (рекурсивный алгоритм).
//*w - указатель на корень дерева.
{
  int i;
 
  if  (*w!=NULL)
  { Vyvod (&((**w).Right),l+1);
    for  (i=1; i<=l; i++) cout<<"   ";
    cout<<(**w).Key<<endl;
    Vyvod (&((**w).Left),l+1); }
}
 
int TREE::Height (node **w)
//Определение высоты бинарного дерева.
//*w - указатель на корень дерева.
{
  int h1,h2;
  if  (*w==NULL) return (-1);
  else
  {
    h1 = Height (&((**w).Left));
    h2 = Height (&((**w).Right));
    if  (h1>h2) return (1 + h1);
    else  return (1 + h2);
  }
}
10
4 / 4 / 3
Регистрация: 05.05.2010
Сообщений: 45
21.05.2010, 16:28 3
Вот вывод в виде вложенных скобок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
struct Node
{
    int key;
    Node *left;
    Node *right;
};
Node *root;
Node *Add_Node(Node *root,int value)
{
    if(!root)
    {
        root=new Node;
        root->left=root->right=NULL;
        root->key=value;
        return root;
    }
    if(value<root->key)
        root->left=Add_Node(root->left,value);
    else if(value>root->key)
        root->right=Add_Node(root->right,value);
    return root;
}
void Print_Node(Node *root)
{
    if(!root)
        return;
    printf("(");
    printf("%d",root->key);
    Print_Node(root->left);
    Print_Node(root->right);
    printf(")");
}
void main()
{
    setlocale(LC_ALL,"Rus");
    int i,a[10]={2,5,7,1,4,3,9,12,6};
    for(i=0;i<9;i++)
        root=Add_Node(root,a[i]);
    Print_Node(root);
    getch();
}
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2010, 16:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывод бинарного дерева в консоль
Доброго времени суток! Прошу помощи в выводе бинарного дерева на экран (в консоль). Есть шаблон: ...

Вывод на консоль бинарного дерева
как сделать вывод на консоль бинарного дерева? struct Node { int d; Node* left; Node*...

Вывод бинарного дерева на экран в виде "дерева"
основная задача: подсчет количества листьев. проблема: при просмотре хочу выводить бин. дерево, в...

Вывод левой ветки бинарного дерева
Здравствуйте, уважаемые форумчане! Вывел левую ветку бинарного дерева на экран, но хотел...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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