Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Бинарное дерево

16.09.2017, 13:12. Показов 4088. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Извиняюсь, если все плохо, но вот код, который следует подправить:
Python
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
class Tree:
  def __init__ (self, n):
    self.Name = n
    self.Left, self.Right = None, None
    
  def AddLeft(self, n):
    t = Tree(n)
    if self.Left == None:
      self.Left = t
    else:
      t.Left = self.Left
      self.Left = t
  
  def AddRight(self, n):
    t = Tree(n)
    if self.Right == None:
      self.Right = t
    else:
      t.Right = self.Right
      self.Right = t
  
  def Print(self, n):
    s = ' ' * n
    print(s + 'Имя корня: {0}'.format(self.Name))
    if self.Left != None:
      print(s + 'Левый потомок: {0}'.format(self.Left.Name))
    else:
      print(s + 'Левый потомок: ссылка равна nil.')
    
    if self.Right != None:
      print(s + 'Правый потомок: {0}'.format(self.Right.Name))
    else:
      print(s + 'Правый потомок: ссылка равна nil.')
  
  @classmethod
  def SeachBool(t, n):
    Result = False
    if t != None:
      if t.Name == n:
        Result = True
      else:
        Result = SeachBool(t.Left, n) or SeachBool(t.Right, n)
  
  def SeachSelf(self, n):
    SeachBool(self, t, n)
Ругается в строках: 39, 42, 45.

Образец кода (мною написан):
Pascal
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
type
  Tree = class
    Name: string;
    Left, Right: Tree;
    
    constructor(n: string);
    begin
      Name := n;
      Left := nil;Right := nil;
    end;
    
    procedure AddLeft(n: string);
    begin
      var t := new Tree(n);
      if Left = nil then
        Left := t
      else
      begin
        t.Left := Left;
        Left := t;
      end;
    end;
    
    procedure AddRight(n: string);
    begin
      var t := new Tree(n);
      if Right = nil then
        Right := t
      else
      begin
        t.Right := Right;
        Right := t;
      end;
    end;
    
    procedure Print(n: integer);
    begin
      var str := ' ' * n;
      WritelnFormat(str + 'Имя корня: {0}', Name);
      if Left <> nil then
        WritelnFormat(str + 'Левый потомок: {0}', Left.Name)
      else
        Writeln(str + 'Левый потомок: ссылка равна nil.');
      
      if Right <> nil then
        WritelnFormat(str + 'Правый потомок: {0}', Right.Name)
      else
        Writeln(str + 'Правый потомок: ссылка равна nil.');
    end;
    
    class function Seach(t: Tree; n: string): boolean;
    begin
      Result := false;
      if t <> nil then
      begin
        if t.Name = n then
          Result := true
        else
          Result := Seach(t.Left, n) or Seach(t.Right, n);
      end;
    end;
    
    function Seach(n: string) := Seach(self, n);
    
    class function SeachT(t: Tree; n: string): Tree;
    begin
      if t = nil then Result := nil
      else if n = t.Name then Result := t
      else 
      begin
        result := SeachT(t.Left, n);
        if result = nil then result := SeachT(t.Right, n);
      end;
    end;
    
    class procedure PrintRecursive(t: Tree; n: integer);
    begin
      if t <> nil then
      begin
        t.Print(n);
        n := n + 3;
        PrintRecursive(t.Left, n);
        PrintRecursive(t.Right, n);
      end;
    end;
    
    class function operator +(s: string; t: Tree): Tree;
    begin
      t.AddLeft(s);
      result := t
    end;
    
    class function operator +(t: Tree; s: string): Tree;
    begin
      t.AddRight(s);
      result := t
    end;
  end;
 
begin
  var T := new Tree('A');
  T := 'B' + T + 'C';
  T.Left := 'D' + T.Left + 'E';
  T.Right := 'F' + T.Right + 'G';
  
  Tree.PrintRecursive(T, 0);
end.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2017, 13:12
Ответы с готовыми решениями:

Бинарное дерево
Добрый вечер! class BinaryTree: def __init__(self, root_obj): # корень self.root = root_obj #...

Бинарное дерево
Необходимо построить сортирующее бинарное дерево, применить к нему процедуры обходов и результаты сохранить в файл. Как это можно...

Создать бинарное дерево
Помогите пожалуйста! Создать бинарное дерево и функции добавления, печати, сложения, сравнения

3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.09.2017, 02:21
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Ругается
А так?
Python
1
2
3
4
5
6
7
8
def SeachBool(t, n):
  if t != None:
    if t.Name == n:
      return True
    else:
      return SeachBool(t.Left, n) or SeachBool(t.Right, n)
  else:
    return False
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.09.2017, 08:24  [ТС]
Python
1
2
    def SeachSelf(self, n):
      return SeachBool(self, n) # ругается тут
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.09.2017, 17:50
Volobuev Ilya, честно говоря, я и в нужности функции SeachBool сильно сомневаюсь. Лучше возвращать либо сам объект, если ключ совпадает с искомым, либо рекурсивно вызывать для левого/правого поддеревьев, либо возвращать None, если поиск в лист уткнулся...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2017, 17:50
Помогаю со студенческими работами здесь

Бинарное дерево. Граф. Поиск в ширину
Помогите интернет-магазину! Магазин имеет связь с социальной сетью, и когда кто-то покупает в ней какой-то товар, то эта информация...

Бинарное дерево(увеличить все ключи дерева на число k)
Составить программу, увеличивающую все ключи дерева на число k

Связной список / бинарное дерево
Здравствуйте. В университете получил проект имплементации бинарного дерева и связного списка (binary tree, linked list). Как можно это...

Реализовать бинарное дерево и обход по нему
Дано бинарное дерево. Найти самый длинный в дереве путь, проходящий только по вершинам с нечетными номерами. Нужно реализовать бинарное...

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru