Бинарные деревья поиска

голоса
5

Это код находится на википедии относительно BST:

# 'node' refers to the parent-node in this case
 def search_binary_tree(node, key):
     if node is None:
         return None  # key not found
     if key < node.key:
         return search_binary_tree(node.leftChild, key)
     elif key > node.key:
         return search_binary_tree(node.rightChild, key)
     else:  # key is equal to node key
         return node.value  # found key

Теперь вот Binary Tree:

       10
    5        12
  3   8    9   14
     4 11  

Если я ищу 11, и я следовать алгоритму там, я начинаю с 10, я иду прямо к 12, а затем налево до 9. И я дойти до конца дерева, не находя 11. Но 11 существует в моем дереве , это только на другой стороне.

Можете ли вы объяснить, что существует ограничение в бинарном дереве для этого алгоритма работать на моем дереве?

Благодарю.

Задан 07/09/2010 в 06:31
источник пользователем
На других языках...                            


5 ответов

голоса
3

Не следует путать между Binary Tree и бинарное дерево поиска. Бинарное дерево поиска (сокращенно называется BST) представляет собой особый тип бинарного дерева, где все узлы на левой стороне находятся меньше, чем или равно родительский узел, и все узлы правых больше, чем родительский узел.

В то время как , например , вы дали просто Binary Tree и не бинарное дерево поиска. Вы можете видеть , что значение 11 и 14 остаются в родительском узле 10 , который нарушает свойство BST. Посмотрите здесь для бинарных деревьев поиска.

Ответил 07/09/2010 в 06:34
источник пользователем

голоса
1

Вы разместили в узлах 14 и 11 в неправильном месте. Из статьи Википедии на BSTs :

  • Левое поддерево узла содержит только узлы с ключами меньше, чем ключ узла.
  • Правое поддерево узла содержит только узлы с ключами больше, чем ключ узла.
  • И левые и правые поддерева также должны быть двоичным деревом поиска.

Как вы можете видеть, как 14 и 11 больше, чем 8.

Ответил 07/09/2010 в 06:35
источник пользователем

голоса
3

Дерево вы представили в не BST. 11 и 14 никогда бы не были вставлены слева от 10, и поэтому алгоритм не искать там. 9 также неуместны.

Вставка согласно Википедии:

Вставка начинается как начнется поиск; если корень не равен значению, мы ищем левый или правый поддеревьев, как и раньше. В конце концов, мы достигнем внешнего узел и добавить значение в качестве правого или левого ребенка, в зависимости от значения узла. Другими словами, мы рассматриваем корень и рекурсивно вставить новый узел в левое поддерево, если новое значение меньше, чем корень, или правое поддерево, если новое значение больше или равно корню.

Вы можете сказать, что бинарное дерево является BST, если оно обладает этими свойствами (в том числе из Википедии):

  1. Левое поддерево узла содержит только узлы с ключами меньше, чем ключ узла.
  2. Правое поддерево узла содержит только узлы с ключами больше, чем ключ узла.
  3. И левые и правые поддерева также должны быть двоичным деревом поиска.
Ответил 07/09/2010 в 06:35
источник пользователем

голоса
10

Это просто потому, что ваше дерево не бинарное дерево поиска: он не упорядочен правильно. BST построен, как описано в алгоритме на самом деле. Например, в дереве: узел «9» не в правильном положении, потому что, как 9 <10 он должен находиться под левой ветви корневого узла «10». То же самое для «14» и «11», который должен быть на правой ветви.

Для экземпляра BST может STH, как это:

    10
  5    11
3   8    12
          14
Ответил 07/09/2010 в 06:37
источник пользователем

голоса
1

ваше дерево не бинарное дерево поиска

Ответил 07/09/2010 в 06:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more