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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 20:09   #1
Lera_E
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 1
По умолчанию По заданным значениям N рассчитать число всех узлов с глубиной N в заданном дереве.Код есть

По заданным значениям N рассчитать число всех узлов с глубиной N в заданном дереве.Еще очень неопытна в С++.Помогите с заданием пожалуйста. Дерево есть:
#include <iostream>
#include <conio.h>
using namespace std;

struct Node
{
int x;
Node *l,*r;
};

void show(Node *&Tree)
{
if (Tree!=NULL)
{
show(Tree->l);
cout<<Tree->x;
show(Tree->r);
}
}

void add_node(int x,Node *&MyTree)
{
if (NULL==MyTree)
{
MyTree=new Node;
MyTree->x=x;
MyTree->l=MyTree->r=NULL;
}

if (x<MyTree->x)
{
if (MyTree->l!=NULL) add_node(x,MyTree->l);
else
{
MyTree->l=new Node;
MyTree->l->l=MyTree->l->r=NULL;
MyTree->l->x=x;
}
}

if (x>MyTree->x)
{
if (MyTree->r!=NULL) add_node(x,MyTree->r);
else
{
MyTree->r=new Node;
MyTree->r->l=MyTree->r->r=NULL;
MyTree->r->x=x;
}
}

}
void DeleteTree(Node *Tree)
{
if (Tree)
{
DeleteTree(Tree->l);
DeleteTree(Tree->r);
delete Tree;
Tree = NULL;
}
}
int main()
{
Node *Tree=NULL;
int z,k;
cin >> z;
for (int i=0;i<z;i++)
{
cin >> k;
add_node(k,Tree);
}
show(Tree);
DeleteTree(Tree);
cin.get();
getch();
return 0;
}
Lera_E вне форума Ответить с цитированием
Старый 19.10.2013, 07:22   #2
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <iostream>


struct tree {
   int   data;
   tree* left;
   tree* right;
};


// добавление
void add_data(tree*& t, int data) {
    if(t == NULL) {
          t  = new tree();
          t->data  = data;
          t->left  = NULL;
          t->right = NULL;
          return;
    }

    if(data < t->data)
         add_data(t->left, data);
    else
         add_data(t->right, data);
}



// симметричный обход
void show_all(tree* t, std::ostream& hout) {
   if(t == NULL)
       return;
   show_all(t->left, hout);
   hout << t->data << ' ';
   show_all(t->right, hout);
}



// чистка
void remove_all(tree* t) {
   if(t == NULL)
       return;
   remove_all(t->left);
   remove_all(t->right);
   delete t;
}



// кол-во элементов на указанной глубине-x
int counter(tree* t, int x) {
    if((t == NULL) || (x <= 0))
        return 0;
    else {
        x--;
        int n = counter(t->left, x) + counter(t->right, x) + 1;
        return n;
    }
}




int main(void){
    tree* t = NULL;

    for(int i = 0; i < 30; i++)
         add_data(t, std::rand() % 10);

    int x = 5;
    int n = counter(t, x);
    std::cout << "кол-во узлов на указанной глубине: " << n << std::endl;

    show_all(t, std::cout);

    remove_all(t);
    return 0;
}
Пример работы кода
Nuklon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить график функции F(x) на заданном интервале с заданным шагом и вывести значения х и функции F(x) в таблицу в графическом р Proskurina Паскаль, Turbo Pascal, PascalABC.NET 8 12.11.2012 21:57
Определить, есть ли одинаковые даты в заданном промежутке InfoR Microsoft Office Excel 5 12.10.2012 14:03
логическая функция same(t), определяющая, есть ли в бинарном дереве T хотя бы два одинаковых элемента 123456789igor Паскаль, Turbo Pascal, PascalABC.NET 1 30.05.2011 00:22
Как узнать Handle всех окон с заданным названием? Ga-sergey Win Api 3 24.05.2010 23:35
рассчитать число столбцов c_zurab Microsoft Office Excel 2 17.03.2008 10:50