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

Бинарное дерево поиска - C++

Восстановить пароль Регистрация
 
kostya990
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 12
05.06.2013, 01:03     Бинарное дерево поиска #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
#include<iostream>
using namespace std;
 struct Elem{
               int Key;
               Elem *left;
               Elem *right;
               };
 void AddElement( Elem R, int val )
 {
 if(val==R.Key) return;
 if(val>R.Key){
               if(R.right==NULL){
                                 R.right=new Elem;
                                 R.right->Key=val;
                                 }
               else
                   AddElement(*R.right,val);
               }
 else{
      if(R.left=NULL){
                     R.left=new Elem;
                     R.left->Key=val;
                     }
      else{
          //AddElement(*R.left,val);
          Elem *root;
          root=new Elem;
          root->Key=val;
          root->left=NULL;
          root->right=NULL;
          R=*root;
          }
      }
 }
 int FindElement( Elem R, int val )
 {
 if(R.Key==val)return R.Key;
 if(R.Key>val)return FindElement(*R.right, val);
 if(R.Key<val)return FindElement(*R.left, val);
 }
 bool DeleteElement(Elem R, int target)
 {
 if(R.Key==target){
                   if((R.right!=NULL)&&(R.left!=NULL))
                                                      {
                                                      Elem P=*R.left;
                                                      if(P.right==NULL){
                                                                        R.Key=P.Key;
                                                                        R.left=P.left;
                                                                        }
                                                      else{
                                                           while((P.right->right)!=NULL)
                                                           R=*P.right;
                                                           R.Key=P.right->Key;
                                                           P.right=NULL;
                                                           }
                                                      return false;
                                                      }
                   else
                        return true;
                   }
 if(!DeleteElement(*R.left,target)){
                                  if((R.left->left)==NULL)
                                                       R.left=(R.left->right);
                                  else
                                      R.left=(R.left->left);
                                  return false;
                                  }
 if(!DeleteElement(*R.right,target)){
                                  if(R.right->left==NULL)
                                                        R.right=R.right->right;
                                  else
                                      R.right=(R.right->left);
                                  return false;
                                  }
 return false;                    
 }
 int main()
 {
 Elem R;
 int val,target,n;
 cout<<"Vveditekol el: ";
 cin>>n;
 cout<<"Zapolnite derevo->"<<endl;
 for(int i=0;i<n;i++){
                      cin>>val;
                      AddElement(R, val);
                      }
// cout<<"Vedite znachenie kotoroe hotite naiti: ";
 //cin>>val;
// FindElement(R,val);
 //cout<<R.Key;
 cin>>target;
 DeleteElement(R,target);
 system("pause");
 return 0;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 01:03     Бинарное дерево поиска
Посмотрите здесь:

C++ Бинарное (двоичное) дерево поиска
C++ Бинарное дерево поиска знаков зодиака
C++ Структура, по строкам построить бинарное дерево поиска
Бинарное дерево поиска C++
Бинарное дерево поиска (удаление, добавление элемента) C++
C++ Бинарное дерево поиска C++
C++ Бинарное дерево поиска
C++ Бинарное дерево поиска

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

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

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