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

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

Восстановить пароль Регистрация
 
amarok12
Сообщений: n/a
26.12.2012, 00:32     Бинарное дерево #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
#include <iostream>
#include <conio.h>
#define n 8
 
using namespace std;
struct tree {
       int data;
       struct tree *left; 
       struct tree *right;
};
 
struct tree *root;  
struct tree *find(int value);
struct tree *build_tree(struct tree *root,struct tree *r, int data); 
void print_tree(struct tree *root, int l);
 
int main(void) 
{
  root = NULL; 
  struct tree *node;
  int i,g,a[n]={5,3,2,4,1,6,7,8};
  for(i=0;i<n;i++)  
   { 
       root = build_tree(root, root, a[i]);
      } 
  cout<<"Binary tree:"<<endl<<endl;
  print_tree(root, 0); 
  cout<<endl<<"Enter the number: ";
  cin>>g;
  if((node=find(g))!=NULL)
     {
                          cout<<"Yes";
                          }
    else 
    {
         cout<<"NO";
          }
  root=NULL;
  getch();
}
 
 
 
  struct tree *build_tree(struct tree *root,struct tree *r,int data) 
  {
    if ( !r) 
    {
     r= (struct tree *) malloc(sizeof(struct tree));
     r->left = NULL; 
     r->right = NULL; 
     r->data = data;
     if(!root) 
        return r;  
     if(data < root->data) 
        root->left = r; 
     else 
        root->right = r;
     return r;
     }
     if(data < r->data)
         build_tree(r, r->left, data); 
     else
         build_tree(r, r->right, data);
     return root;
 }
 
void print_tree(struct tree *r, int l)
 {
   int  i;
   if (!r) return;
   print_tree(r->right, l+2); 
   for(i=0; i<l; ++i) 
   cout<<"    ";
   cout<<r->data<<endl<<endl; 
   print_tree(r->left, l+2);
 }
struct tree *find(int value)
  {
         struct tree *pnode=root;
         while(pnode!=NULL)
           {
               if(pnode->data==value) return pnode;
                else if(pnode->data>value)  
                   pnode=pnode->left;
                 else 
                   pnode=pnode->right;
             }
        return NULL;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 00:32     Бинарное дерево
Посмотрите здесь:

Бинарное дерево C++
C++ Бинарное дерево
бинарное дерево C++
Бинарное дерево C++
Бинарное дерево C++
C++ Дерево бинарное
Бинарное дерево. С++ C++
Бинарное дерево C++

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

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

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