fbpx

Бинарное дерево. сохранение узлов после внутренней функции

223 просмотра
0
0 Комментариев

строю бинарное дерево, в котором будут находиться слова. в узлах — буквы слов. при добавлении нового слова в пустое дерево должно получится следующее

введите сюда описание изображения

но записывается только корень. как я понял, это из-за того, что внутренняя функция не записывает узлы, и после её выполнения они исчезают. как этого избежать? как сделать так, чтобы функция дополняла дерево? сохранение в переменную не помогло.

код:

class Tree(object):
    def __init__(self, value=None):
        self.left = None
        self.right = None
        self.value = value
 
    def insert(self, word):
        w = list(word)
        if self.value == None: # tree is empty
            self.value = w.pop(0)
            self.left = self.insert_iter(self.left, w, word)
        elif self.value == w[0]: # root is contain the same value
            w.pop(0)
            self.insert_iter(self.left, w, word)
        else:
            self.insert_iter(self.right, w, word)
    def insert_iter(self, cur_node, w, word):
        for char in w:
            # print('adding!')
            if cur_node is None:
                # print(cur_node)
                cur_node = Tree(char)
                # cur_node.value = char
                cur_node = cur_node.left
            elif cur_node.value == char:
                cur_node = cur_node.left
            elif cur_node.value != char:
                cur_node = cur_node.right
                self.insert_iter(cur_node, w, word)
                # cur_node = self.insert_iter(cur_node, w, word)
 
def print_tree(tree):
    if tree != None:
        print_tree(tree.left)
        print(tree.value)
        print_tree(tree.right)
 
def testTree():
    myTree = Tree()
    myTree.insert("Maud")
    # print(myTree.left.value)
    print_tree(myTree)
 
testTree()

также мне сказали, ошибка тут

if cur_node is None:
    cur_node = Tree(char)


Добавить комментарий

0 Answers

Python Опубликовано 22.05.2019
Напишите свой ответ на данный вопрос.
Scroll Up