Цикл рекурсии binaryTree возвращает None - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть эта функция с именем print_tree_array, которая должна распечатывать массив двоичного дерева слева направо, например: [460, 517, 72, 33, 699, 789, 764, 685, 961, 851].это прекрасно, до последнего цикла.Затем он просто возвращает None, даже если я return array произношу else оператор

. Я много чего перепробовал и пришел к выводу, что двоичное дерево работает и "каркас" настроен правильно.

class node:
    def __init__(self, value=None):
        self.value= value
        self.r_child=None
        self.l_child=None

class tree:
    def __init__(self):
        self.root=None

    def insert(self, value, cur_node):
        if(self.root==None):
            self.root=node(value)
        else:
            if(value<cur_node.value):
                if(cur_node.l_child==None):
                    cur_node.l_child=node(value)
                else:
                    self.insert(value, cur_node.l_child)    
            elif(value>cur_node.value):
                if(cur_node.r_child==None):
                    cur_node.r_child=node(value)
                else:   
                    self.insert(value, cur_node.r_child)    

    def print_tree_array(self, cur_node, array=[]):
        if(self.root==None):
            return []
        else:
            if(cur_node!=None):
                self.print_tree_array(cur_node.l_child, array)
                self.print_tree_array(cur_node.r_child, array)
                print(array)
                return array.append(cur_node.value)
            else:
                return array        

    def get_root(self):
        return self.root 


def fill_with_random(tree, size, min_range, max_range):
    from random import randint
    for _ in range(size):
        value = randint(min_range, max_range)
        print(value)
        tree.insert(value, tree.root)
    return tree

current_tree = tree()
current_tree = fill_with_random(tree=current_tree, size=10, min_range=0, max_range=999)
print(current_tree.print_tree_array(cur_node=current_tree.root))
708
999
534
79
692
39
904
979
46
568
[]
[46]
[46, 39]
[46, 39, 79]
[46, 39, 79, 568]
[46, 39, 79, 568, 692]
[46, 39, 79, 568, 692, 534]
[46, 39, 79, 568, 692, 534, 979]
[46, 39, 79, 568, 692, 534, 979, 904]
[46, 39, 79, 568, 692, 534, 979, 904, 999]
None

Это то, что он печатает, поскольку вы можете видеть, что он заполняет двоичное дерево, используя первые напечатанные строки.Затем он продолжает красиво добавлять каждый «конец» дерева в массив.Но он не может добавить самый правый элемент и вернуть весь массив.

1 Ответ

0 голосов
/ 26 апреля 2019

array.append фактически ничего не возвращает, но добавляет только исходный список

https://www.programiz.com/python-programming/methods/list/append

Если хотите, вы должны вернуть массив после добавления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...