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

Бинарные деревья - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Оператор new и char http://www.cyberforum.ru/cpp-beginners/thread799846.html
char * test = new char; Не работает данный код, да и вообще любая операция new на char не работает. Ошибок не выдает, но в дебаггере пишет, что невозможно прочесть память и что присвоена вот такая строка: "Нээээ««««««««юою". С чем это связано? И такое только в VS, в других компиляторах такого нет и работает все нормально.
C++ Функция, определяющия количество цифр в дробной и целой частях числа Как написать эту функцию? http://www.cyberforum.ru/cpp-beginners/thread799841.html
Компилируется но при выполнении ошибка C++
Не могу понять в чем ошибка программа компилируется но крашится посля выполнения нескольких строчек кода P.S в данном коде открываю файл считываю в строки условия и действия , Возможно намудрил с условиями или с открытием файла #include <iostream> #include <string> #include <fstream> #include <stdio.h> using namespace std; int main() {
Вектор вектора C++
Доброго времени суток формучане! Очень надеюсь на вашу помощь. Вопрос вроде простой, но у меня в синтаксисе векторов дела плохи. В общем есть код. #include <iostream> #include <vector> using namespace std; vector <vector <int> > g; int main()
C++ rand() между 0 и 1 http://www.cyberforum.ru/cpp-beginners/thread799811.html
Здравствуйте! не смог с генерировать маленькое число в промежутке о и 1. Как это сделать? Гугл не помог...
C++ Ошибка в программе смысл такой: Код: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_BUFF_LEN 56 const char* const greeting = "Your message is: "; подробнее

Показать сообщение отдельно
maks_b
4 / 4 / 0
Регистрация: 11.10.2011
Сообщений: 15
03.03.2013, 21:23     Бинарные деревья
Здравствуйте, помогите найти ошибку(всё компилируется):
Найти и удалить (правым удалением) среднюю по значению вершину из вершин дерева, у которых количество потомков в левом поддереве не равно количеству потомков в правом поддереве. Выполнить прямой (левый) обход полученного дерева.
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
#include <iostream>
#include <fstream>
using namespace std;
 
struct TreeNode{
    int key;
    int depth;
    TreeNode *Left,*Right,*Parent;
};
void show(ostream & out ,TreeNode *tmp)
{
    if(!tmp)return;
    out<<tmp->key<<endl;
    if(tmp->Left)
    show(out,tmp->Left);
    if(tmp->Right)
    show(out,tmp->Right);
}
void AddNode(TreeNode *&pTree, int Key,TreeNode *Parent)
{
    if (pTree)
    {
        if (Key < pTree->key)
        {pTree->depth--;
        AddNode(pTree->Left, Key,pTree);}
        else if (Key > pTree->key)
        {pTree->depth++;
        AddNode(pTree->Right, Key,pTree);}
    }
    else{
        pTree = new TreeNode();
        pTree->key = Key;
        pTree->depth=0;
        pTree->Parent=Parent;
    }
}
TreeNode*  findRightMini(TreeNode *pTree){
    if(pTree->Left)
            return findRightMini(pTree->Left);
    else{
        return pTree;
    }
}
void findForDelet(TreeNode *tree,int *mass,int  &i)
{
    if(tree->Left!=NULL)
    {findForDelet(tree->Left,mass,i); }
    if(tree->depth){
        mass[++i]=tree->key;cout<<mass[i]<<" ";
    }
    if(tree->Right)
        findForDelet(tree->Right,mass,i);
    
}
void* NoNULL(void *a,void *b){
    if(a==NULL)return b;
    return a;
}
TreeNode * searchNode(TreeNode * ptmp, double key){
    if(!ptmp)return NULL;
    if (ptmp->key==key) return ptmp;
    return (TreeNode*)NoNULL(searchNode(ptmp->Left,key),searchNode(ptmp->Right,key));
}
void delet(TreeNode *pTree){    
    if(pTree==NULL)return;
    int *mass= new int[200];
    int n=0; 
    findForDelet(pTree,mass,n);
    
    if(n%2==0)return;
    TreeNode *tree1, *tree2;
        tree1=searchNode(pTree,mass[n/2+1]);
    
        
    if(tree1->Right){
        tree2=findRightMini(tree1->Right);
        if(tree1->Right->Left!=NULL)
               tree2->Parent->Left=tree2->Right;
        else   tree2->Parent->Right=tree2->Right;
        tree1->key=tree2->key;
    }
    else if(tree1->Left){
        tree1->key=tree1->Left->key;
        tree1->Right=tree1->Left->Right;
        tree1->Left=tree1->Left->Left;
    }
    }
int main(){
    ifstream in("in.txt");
    int key;
    TreeNode *tree = NULL; 
    
    while(in>>key){
        AddNode(tree, key, NULL);
    }
    if(tree!=NULL){
        delet(tree);
        ofstream out("out.txt");
        show(out,tree);
    }cin>>key;
    return 0;
}
Добавлено через 1 минуту
Это правильно или я не так понял условие?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru