5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
|
||||||
1 | ||||||
Бинарное Дерево21.01.2018, 15:37. Показов 613. Ответов 6
Метки нет Все метки)
(
что я сделал не правильно подскажите пожалуйста!!! Выдает ошибку при вызовве функции btDelete(*tree, 8);
0
|
|
21.01.2018, 15:37 | |
Ответы с готовыми решениями:
6
Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой Бинарное дерево Бинарное дерево |
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
|
|
21.01.2018, 15:42 [ТС] | 3 |
volvo, как правильно обратиться к ней в main подскажите пожалуйста
0
|
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
|
|
21.01.2018, 15:50 [ТС] | 5 |
не пойму как
Добавлено через 5 минут а понял спасибо а почему нельзя через разыменование указателя?
0
|
Супер-модератор
![]() ![]() |
||||||
21.01.2018, 15:51 | 6 | |||||
Добавлено через 44 секунды А потому что функция ждет указатель на указатель, а не структуру.
1
|
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
|
|
21.01.2018, 20:35 [ТС] | 7 |
спасибо за помощь не злись, тупой я походу
Добавлено через 4 часа 36 минут struct Tree { int value; Tree *l, *r; }; void add(Tree *&obj, int value) { if (obj == NULL) { obj = new Tree; obj->value = value; obj->l = obj->r = NULL; return; } if (obj->value < value) { add(obj->l, value); } else { add(obj->r, value); } } void show(Tree *&tree) { if (tree == NULL)return; cout << tree->value << endl; show(tree->r); show(tree->l); } int sizeT(Tree *tree, int count = 0) { if (tree == NULL) return count; count++; count = sizeT(tree->l, count); count = sizeT(tree->r, count); return count; } bool search(Tree* tree, int value, bool b = 0) { if (tree == NULL) return 0; if (tree->value == value || b == 1) return b = 1; if (search(tree->l, value) == 1 || search(tree->r, value) == 1) return 1; } void btDelete(Tree **obj, int value) { if (*obj != NULL) { if ((*obj)->value == value) { Tree*tmp = (*obj); if ((*obj)->l == NULL && (*obj)->r == NULL) (*obj) = NULL; else if ((*obj)->l != NULL && (*obj)->r != NULL) { (*obj) = tmp->r; (*obj)->r = (*obj)->r; (*obj)->r = (*obj)->l; /*(*obj) = tmp->r; (*obj)->l = (*obj)->r;*/ } else if ((*obj)->l == NULL) (*obj) = tmp->r; else if ((*obj)->r == NULL) (*obj) = tmp->l; else { (*obj) = tmp->r; Tree** tmp1; tmp1 = obj; while (*tmp1 != NULL) { tmp1 = &((*tmp1)->l); (*tmp1) = tmp->l; } } delete(tmp); btDelete(obj, value); } else { btDelete(&((*obj)->l), value); btDelete(&((*obj)->r), value); } } } bool emptyBT(Tree* obj) { return (obj == NULL ? true : false); } void print_Tree(Tree * p, int level) { if (p) { print_Tree(p->l, level + 1); for (int i = 0; i< level; i++) cout << " "; cout << p->value << endl; print_Tree(p->r, level + 1); } } int main() { Tree *tree = NULL; add(tree, 8); add(tree, 5); add(tree, 3); add(tree, 6); add(tree, 12); add(tree, 10); add(tree, 11); show(tree); cout << "Size: " << sizeT(tree) << endl; cout << endl << endl; btDelete(&tree, 5); show(tree); cout << endl << endl; //cout << "->" << search(tree, 15) << endl; //cout << endl; //print_Tree(tree, 0); system("pause"); return 0; } Помогите разобраться с ошибкой при удалении элемента дерева с середины и удаление корня дерева
0
|
21.01.2018, 20:35 | |
Помогаю со студенческими работами здесь
7
Бинарное дерево Бинарное дерево Бинарное дерево
Бинарное дерево Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |