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

Деревья. Высота узла в идеально сбалансированном дереве - C++

Восстановить пароль Регистрация
 
nasty1996
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 8
22.04.2014, 22:10     Деревья. Высота узла в идеально сбалансированном дереве #1
Нужно найти высоту заданного узла, в идеально сбалансированном дереве.
Вот мои наброски не знаю как делать

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
#include <iostream>
#include<fstream>
using namespace std;
ifstream in("input.txt");
ofstream out ("output.txt");
//int a=0;
int h=0;
struct Ttree {int inf; Ttree * left, * right;};
 
//прямой обход
void preorder (Ttree *tr)
{
    if (tr) {
        cout<< tr->inf<<" ";
        preorder (tr->left);
        preorder (tr->right);
    }
}
// postroenie
void creat (int n,Ttree *&tr)
{
    int a;
    if (n>0){
        tr=new Ttree;
        in>>a;
        tr->inf =a;
        tr->left=tr->right=NULL;
        int nl=n/2, nr=n-nl-1;
        creat (nl,tr->left);
        creat (nr,tr->right);
 
    }
}
void height_tree (Ttree *tr, int &theight, int &height)
{
    if (tr) //если текущей узел не пустой
    {
        if (theight>height) //и высота текущего узла больше высоты дерева, то
            height=theight;// полагаем в качестве высоты дерева высоту текущего узла
        theight ++; //увеличиваем высмоту текущего узла
        height_tree(tr->left,theight,height); //обходим левое и правое его поддеревья
        height_tree (tr->right,theight,height);
        theight --;
    } else theight--; //после обхода узла высоту текущего узла уменьшаем на 1
}
 
void search1 (int x,Ttree *tr, int & code, int &theight)
{
 
    if (tr)
         {
            if (x==tr->inf)
            {
                cout <<endl << tr->inf;code = 1;
            }
    else
        {
 
            search1(x,tr->left, code, theight);
            search1(x,tr->right, code, theight);
            theight ++;
          }
    }
}
 
void del_tree(Ttree *&tr)
{
    if (tr)
    {
        del_tree(tr->left);
        del_tree (tr->right);
        delete tr;
        tr=NULL;
    }
}
 
 
 
 
int main ()
{
    int n;
    int x;
    in >> n >> x;
    Ttree *tree = NULL;
    creat (n,tree);
    preorder(tree);
    int code = 0;
 
    search1 (x,tree, code, h);
    if(!code) cout<<"";
    //height_tree(tree,a,h);
    cout<<endl<<h;
    del_tree(tree);
    in.close();
    out.close();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2014, 22:10     Деревья. Высота узла в идеально сбалансированном дереве
Посмотрите здесь:

C++ Удаление элемента(узла) в бинарном дереве
C++ Написать программу построения и поиска в взвешенно-сбалансированном дереве.
C++ Простая организация удаление узла в бинарном дереве
C++ Деревья. Найти длину пути из узла a в узел b
C++ Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве)
Идеально сбалансированное дерево C++
C++ Идеально сбансированное дерево
Идеально сбалансированное дерево C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru