2017-02-19 8 views
1

Я пытаюсь найти эффективный и простой способ сохранить значение обхода дерева (по порядку) в списке для дальнейшей обработки, но я не получаю надлежащего способа его выполнения.Как сохранить значение в списке при обходе по порядку в дереве?

Причина, по которой я хочу найти режим в дереве. Я пробовал переменные global, но я не поклонник этого, что делает код плохо выглядеть. Я попробовал функцию выхода, но это, похоже, не приносит пользы. (Я надеюсь, некоторые оставили для этого)

def inorder(self,root): 
     if not root: 
      return 
     self.inorder(root.left) 
     self.store(root.val) 
     self.inorder(root.right) 

Спасибо, Prerit

ответ

0

Если вы используете Pyhotn 3.3+, вы можете использовать yield и yield from expressions:

class Node: 

    def __init__(self, val, left=None, right=None): 
     self.val = val 
     self.left = left 
     self.right = right 

    def inorder(self, root): 
     if not root: 
      return 
     yield from self.inorder(root.left) 
     yield root.val 
     yield from self.inorder(root.right) 

     # # For Python 3.2- 
     # for val in self.inorder(root.left): 
     #  yield val 
     # yield root.val 
     # for val in self.inorder(root.right): 
     #  yield val 

Использование:

# Traverse 
n = Node('top', Node('left'), Node('right')) 
for val in n.inorder(n): 
    print(val) 
# -> prints `left`, `top`, `right` 

# get as a list 
list(n.inorder(n)) # -> ['left', 'top', 'right'] 
+0

Я пробовал это на LeetCode OJ раньше, он дает синтаксическую ошибку. Полагаю, я должен попробовать второй путь. – Prerit

+0

Таким образом, leetcode имеет версию python <3.3. :) Благодаря! – Prerit

 Смежные вопросы

  • Нет связанных вопросов^_^