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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2010, 18:11   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию Высота бинарного дерева

Всем привет.
В общем, нужно найти высоту идеально сбалансированного бинарного дерева(не дерева поиска).
Количество элементов ввожу с клавы.
Вот код программы, если что.

Код:
#include <iostream>
#include<windows.h>
using namespace std;

struct point
{
int data;//информационное поле
point *left;//адрес левого поддерева
point *right;//адрес правого поддерева
};

point* Tree(int n, point *p)
{
    point *r;
    int nl,nr;
    if(n==0){p=NULL;return p;}
    nl=n/2;
    nr=n-nl-1;
    r=new point;
    cout<<"элемент:";
    cin>>r->data;
    r->left=Tree(nr, r->left);
    r->right=Tree(nl, r->right);
    p=r;
    return p;
}

void Print(point*p, int l) 
{
    if(p)
    {
        Print(p->left,l+5);
        for(int i=0;i<l;i++)
            cout<<" ";
        cout<<p->data<<"\n";
        Print(p->right,l+5);
    }
}

void main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n,i=0;
    cout<<"Задайте количество элементов дерева\n";
    cin>>n;
    point *root;
    root=new point;
    root=Tree(n, root);
    Print(root,1);
}

Последний раз редактировалось Stilet; 15.03.2010 в 09:31.
m9yt вне форума Ответить с цитированием
Старый 13.03.2010, 19:07   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от m9yt Посмотреть сообщение
найти высоту идеально сбалансированного бинарного дерева
Можно уточнить это определение? А то у меня подозрение, что ответ равен 1+[log2(n)] (где [] обозначает целую часть), и строить ничего не надо Хотя, может, я неправильно понял условие...
Vago вне форума Ответить с цитированием
Старый 13.03.2010, 20:06   #3
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Можно уточнить это определение? А то у меня подозрение, что ответ равен 1+[log2(n)] (где [] обозначает целую часть), и строить ничего не надо Хотя, может, я неправильно понял условие...
Да, правильно поняли.Просто я не знал, что нужно целую часть отделять, а то нецелая высота-это как-то странно))
Только может надо не +1, а -1?
m9yt вне форума Ответить с цитированием
Старый 13.03.2010, 20:31   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

По-моему, всё-таки, +1
Код:
         n                       [log2(n)]    глубина
---------------------      --------      ---------
1                                     0               1
2 3                                  1               2
4 5 6 7                            2               3
8 9 10 11 12 13 14 15     3               4
...
Vago вне форума Ответить с цитированием
Старый 13.03.2010, 22:00   #5
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Мне кажется, корень не входит в высоту дерева.
m9yt вне форума Ответить с цитированием
Старый 13.03.2010, 22:17   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Да, Вы правы "The depth of a binary tree is the depth of its deepest node". "Так не достанься же ты никому", эта единица
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Высота бинарного дерева dido171 Помощь студентам 4 02.12.2014 13:30
Создания бинарного дерева С++ Olya90 Помощь студентам 0 10.06.2009 18:58
Составление бинарного дерева [MI_nor] Общие вопросы C/C++ 1 08.05.2009 00:28
создание бинарного дерева zetrix Паскаль, Turbo Pascal, PascalABC.NET 2 30.11.2006 19:32