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

Вывести число вершин n-го уровня (Бинарное дерево поиска) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму элементов в тех строках которые, содержат хотя бы один отрицательный элемент http://www.cyberforum.ru/cpp-beginners/thread528066.html
Доброго времени суток, очень нужна помощь по одной задачке: Для заданной матрицы размером 8 на 8 найти такие К , что К-я строка матрицы совпадает с К-м столбцом. Найти сумму элементов в тех строках которые, содержат хотя бы один отрицательный элемент. Заранее благодарен!
C++ Возведение в степень Вам конечно это покажется тупой проблемой, но всё же. Напишите пожалуйста как возводить в степень на си и пример. В инете что ищу всё на си++, а мне на обычном надо. http://www.cyberforum.ru/cpp-beginners/thread528053.html
Что интересного можно рассказать о итераторах C++
Нужно рассказать что-то интересное о стандартных итераторах в С++. Может какие-то нетипичные приемы, какие-нибудь оригинальные способы использования. Что-нибудь кроме стандартных приемов и определений. Может опытные программисты что-то на этот счет знают?
C++ Поиск по массиву
Некоторый массив содержит повторяющиеся элементы, нужно найти количество различных элементов в нём. #include<stdio.h> #include<conio.h> #include<iostream> using namespace std; int a = {2,2,5,7,5,7,9,11,10,2,4,1}; int N,i,j,k=0; main(){ N = sizeof(a)/sizeof(a); //узнаём длину массива
C++ Как заменить объект List одного класса объектом другого? http://www.cyberforum.ru/cpp-beginners/thread528041.html
к примеру дано нам 1 объект класса Book , я хочу его вставить в класс Table вместо удаленного объекта данного класса....как мне поступить? class Book { list <LegOfBooks> listBook; list <LegOfBooks> :: iterator iter1;
C++ Подключение PI Привет всем, уже не хватает злости от этого С языка... не могу никак подцепить PI, везде где можно пишут что нужно подцепить math.h и там M_PI, и все равно ничего не находит... MS Visual C++ Express подробнее

Показать сообщение отдельно
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
26.03.2012, 01:53     Вывести число вершин n-го уровня (Бинарное дерево поиска)
всем привет, дано такое задание:
Напишите программу, которая формирует бинарное дерево поиска, выводит построенное дерево на экран и подсчитывает число вершин на n-ом уровне сформированного дерева. Корень считать вершиной 0-го уровня. Обход дерева выполните с помощью не рекурсивного алгоритма. Данные могут вводиться с клавиатуры, из файла или генерироваться с помощью генератора случайных чисел. Перед завершением работы программы освободить занимаемую динамическую память. Для этого используйте поэлементное удаление элементов динамической структуры данных.

пока пытаюсь реализовать удаление поэлементное
уже мучаюсь целый день, и не могу понять в чем проблема, почему строчка 87 while ( cin >>dig2 ) TRoot=Del(TRoot, dig2);
неправильно срабатывает... не дает ввести элементы которые надо удалить, а просто пропускает, подскажите в чем дело??
заранее спасибо, вот мой код:
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
 
struct BSTree   
  { 
    int key;
    BSTree *Left; 
    BSTree *Right; 
  };
BSTree *TRoot=NULL;
int lvl=0;
 
BSTree* AddTree(BSTree *t, int k) 
  
{
    if (t == NULL)
        { 
            t = new BSTree; 
            t->Left = NULL; 
            t->Right = NULL; 
            t->key = k;
        }
    else
        if(t->key==k) return t;
        else             
            {
                if (k > t->key ) t->Right=AddTree(t->Right, k);
                else t->Left=AddTree(t->Left, k);   
            }
    return t;
}
 
void TreeShow(BSTree *t, int lvl ) 
{
    int tab = 5;
    if (t == NULL) cout <<"Derevo pusto \n";
    else
        {
            if (t->Right != NULL) TreeShow(t->Right, lvl+1);
            cout <<setw(tab*lvl) <<t->key <<endl;
            if (t->Left != NULL) TreeShow(t->Left, lvl+1);
        }
}
 
BSTree* Del(BSTree* T, int k)
{ BSTree *P, *v;
  if (T!=NULL) cout << "this element in the tree there!" << endl;
  else if (k < T->key) T->Left = Del(T->Left, k);
       else if (k > T-> key) T->Right = Del(T->Right, k);
        else {P = T;
          if (T->Right!=NULL) T = T->Left; // случай 1
          else if (T->Left!=NULL) T = T->Right; // случай 1
               else // случай 2
                            { v = T->Left;
                              if (v->Right)
                              {
                  while (v->Right->Right) v = v->Right; 
                  T->key = v->Right->key;
                  P = v->Right; v->Right = v->Right->Left;
                              }
                              else
                              {
                               T->key = v->key;
                               P = v;
                               T->Left=T->Left->Left;
                              }
                }
          free(P);
         }
 return T;
}
        
 
void main()
{
    int dig, dig2;
    cout <<"Enter the numbers, for the end of any character other than numbers:\n";
    while ( cin >>dig ) TRoot=AddTree(TRoot, dig);
    cout <<endl;
    TreeShow(TRoot, lvl);
    cout <<"Enter number of items you want to delete, for the end of any character other than numbers:\n";
    while ( cin >>dig2 ) TRoot=Del(TRoot, dig2); 
    cout<<endl;
    lvl=0;
    TreeShow(TRoot, lvl);
    system("PAUSE");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru