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

Неправильно удаляет узел из бинарного дерева - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Инициализация char массива http://www.cyberforum.ru/cpp-beginners/thread836785.html
Мне нужно объявить и инициализировать массив char'ов. К примеру, char *m_words={'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; При подобном использовании ругается на фигурные скобки, мол, "непредвиденные лексемы перед '{'; пропуск вероятного тела функции". При инициализации могут в массиве быть совершенно любые символы.
C++ Создания матрицы через класс Люди у кого есть пример реализации матрицы через класс дайте пожалуйста , желательно что бы там был конструктор копирования , а так все остальное я сам решу. http://www.cyberforum.ru/cpp-beginners/thread836763.html
C++ Нечетные строки матрицы заменить на заданный одномерный массив
Всем привет! Натолкните на совет как решить задачку :) Задача: Написать программу которая случайным образом заполняет двумерным массив размерами 6х6 цифрами от 0 до 10 и одномерный массив из 6 чисел. Нужно нечетные строки двумерного массива заменить на одномерный массив :) Вот что у меня есть: #include <iostream> # include <windows.h> // Библиотеки # include <time.h> using namespace std; ...
задачка S = sin X + sin X^2 + sin x^3 + sin X^4+…+sin X^n C++
я как то писал уже на форуме эту тему, простите если повторяюсь! спасибо большое за помощь в задаче, но возниакает новый вопрос, правильно ли он выводит ответ?! #include "StdAfx.h" #include <iostream> #include <cmath> #include <math.h> using namespace std; int main()
C++ Очередь. Извлечь из исходной очереди пять начальных элементов и вывести их значения http://www.cyberforum.ru/cpp-beginners/thread836740.html
Даны указатели Р1 и Р2 на начало и конец очереди, содержащей не менее пяти элементов. Используя тип TQueue (запись с двумя полями Head - начало очереди и Tail - конец очереди) опсиать функцию Dequeue(Q) целого типа, которая извлекает из очереди первый элемент, возвращает его значение и освобождает память, занимаемую извлеченным элементом (Q - входной и выходной параметр типа Tqueue). С помощью...
C++ Пожалуйста, объясните как использовать потоки Доброго времени суток. Пожалуйста объясните как работать с потоками или киньте ссылу на статью. Прочитал книгу Р.Лафоре "объектно- орентированое программирование в С++" но там не написано как создавть свои потоки. Заранее спасибо. подробнее

Показать сообщение отдельно
litwisha101
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 5
13.04.2013, 18:07     Неправильно удаляет узел из бинарного дерева
Помогите подправить фунцию SearchDelete...Почему-то не работет.

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//13.   Побудувати довільне бінарне дерево, зчитавши числові значення його вузлів з файла.
//Видалити з дерева усі вузли, значення яких є парними числами.
//Надрукувати  дерево, що утворено до та після видалення його вузлів. 
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;
struct node {                               //тип вузла дерева
   int data;                    //інформаційне поле вузла
   node *left,                    //покажчик на ліве піддерево
        *right;                  //покажчик на праве піддерево
};
 int n;                              //кількість вершин дерева
 int value;                      //значення вузлів дерева
 node *root;     
 node *delNode;//покажчик на корінь дерева
 int M=0;
//================= зображення дерева ======================
void Printtree(node **RootTree, int L)
{                //RootTree — масив покажчиків на вузли дерева
                 //L — номер рівня дерева
 if((*RootTree!=NULL))                     //дерево не порожнє
 {
  Printtree(&((*RootTree)->left),L+1);//вивести ліве піддерево
  for(int i=0;i<L;i++)cout<<"    ";    //форматувати виведення
                                                      //дерева
     cout<<(*RootTree)->data<<endl;   //вивести значення вузла
  Printtree(&((*RootTree)->right),L+1);//вивести праве піддерево
   }
}
//============== створення бінарного дерева ==================
void Tree( node  **ptr, int str,int AmountNode )
{ 
           //**ptr - масив покажчиків на вузли дерева,
          //str[10]-рядок, що є значенням інформаційного поля,
                          //AmountNode-кількість вузлів дерева
  int LeftNodes,                    //кількість вузлів у лівому
      RightNodes;                        //і правому піддеревах
  if( AmountNode ==0)                     //якщо вузлів немає,
    *ptr=0;                                   //дерево порожнє
  else 
  {
   LeftNodes= AmountNode / 2;  //кількість вузлів у піддеревах
   RightNodes= AmountNode - LeftNodes -1;
   cout<<"Enter node data: ";
   cin>>str;                //ввести значення для вузла дерева
   *ptr= new node;                     //створити вузол дерева
   (*ptr)->data=str;        //занести значення у вузол
   (*ptr)->left=0;           //обнулити покажчики на піддерева
   (*ptr)->right=0;
        //створити ліве піддерево з кількістю LeftNodes вузлів 
    Tree (&((*ptr )->left ), str, LeftNodes );
      //створити праве піддерево з кількістю RightNodes вузлів 
    Tree(&((*ptr )->right ), str, RightNodes);
  }
}
 
void CaseTwoChild(node** ref)
{
    if((*ref)->right !=NULL)
        CaseTwoChild(&((*ref)->right));
    else
    {
        delNode->data= (*ref)-> data;
        delNode=*ref;
        *ref=(*ref)->left;
    }
}
//===========================================//
 
void SearchDelete(node** pNode, int key)
{
    if(*pNode==NULL)
        cout<<"node is not found"<<endl;
    else 
        if(key<(*pNode)->data)
            SearchDelete(&((*pNode)->left), key);
        else
            if(key>(*pNode)->data)
                SearchDelete(&((*pNode)->right), key);
            else {
                delNode=*pNode;
                if(delNode->right==NULL)
                    *pNode=delNode->left;
                else 
                    if(delNode->left==NULL)
                        *pNode=delNode->right;
                    else
                        CaseTwoChild(&(delNode->left));
                delete delNode;
            }
}
 
//=================== основна програма  ======================
int main()
{
  cout<<"Enter number of tree''s nodes"<<endl;
  cin>>n;                      //задати кількість вузлів дерева
  root=NULL;
  cout << "Enter "<<n<<" integer values:\n";
  Tree(&root,value,n);                        //створити дерево
                         //аргументи: покажчик на корінь дерева,
                          //значення у кореневому вузлі  дерева,
                                      //кількість вузлів дерева
  cout<<"Created tree"<<endl;
  Printtree(&root,0);                      //відобразити дерево
  char ch;
  do
  {
      system("cls");
      Printtree(&root,0);
      cout<<"Enter key to search and delete"<<endl;
      cin>>value;
      SearchDelete(&root, value);
      cout<<"Continue?"<<endl;
      cin>>ch;
      getch();
 
  }while(ch!='n');
  system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru