2017-05-26 7 views
0

Bitte überprüfen Sie meinen Code. Ich kann nicht finden, wo der Fehler ist. Die Frage ist here.Binärer Baumpfad Summe (Python)

Hier ist meine Lösung:

# Given a binary tree, find all paths that sum of the nodes in the path equals to a given number target. 
# 
# A valid path is from root node to any of the leaf nodes. 

# Example 
# Given a binary tree, and target = 5: 
# 
#  1 
# /\ 
# 2 4 
# /\ 
# 2 3 
# return 
# 
# [ 
# [1, 2, 2], 
# [1, 4] 
# ] 



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

class Solution: 
    # @param {TreeNode} root the root of binary tree 
    # @param {int} target an integer 
    # @return {int[][]} all valid paths 

    result = [] 

    def binaryTreePathSum(self, root, target): 
     # Write your code here 
     if root is None: 
      return self.result 
     self.dfs(root, [], target) 
     return self.result 

    def dfs(self, node, tmp, target): 
     tmp.append(node.val) 
     if node.left is None and node.right is None: 
      if target == sum(tmp): 
       #print tmp 
       self.result.append(tmp) 
      tmp.pop() 
      return 

     if node.left: 
      self.dfs(node.left, tmp, target) 
     if node.right: 
      self.dfs(node.right, tmp, target) 
     tmp.pop() 

if __name__ == "__main__": 
    root = TreeNode(1) 
    root.left = TreeNode(2) 
    root.left.left = TreeNode(2) 
    root.left.right = TreeNode(3) 
    root.right = TreeNode(4) 
    result = Solution().binaryTreePathSum(root, 5) 
    print result 

Nehmen wir an, der Eingang {1,2,4,2,3}, 5 ist. Nach dem Ausführen der Lösung lautet die Ausgabe [[],[]]. Aber wenn ich die print tmp Unindent, wird der Ausgang

sein
[1, 2, 2] 
[1, 4] 
[[],[]] 

Der Ausgang des tmp korrekt ist. Aber es scheint, dass result.append(tmp) nicht die tmp in result anhängen. Ich weiß nicht wo das Problem ist.

+1

1. ich nicht Ihre „Frage“ sehen kann, weil ich kein lintcode Konto habe, und ich bin nicht bereit, erstelle einen. 2. Was um alles in der Welt ist '{1,2,4,2,3}'? Soll das ein Set sein? Denn wenn es eine Menge ist, ist es gleich {1,2,3,4}. 3. * "Nehmen wir an, die Eingabe ist ..." * Die Eingabe für _what_? Wenn Sie diese Parameter an binaryTreepathSum übergeben, wird ein AttributeError ausgelöst. –

+0

Bitte __post den vollständigen Code__ (lass die Leute nicht _guess_, was du versuchst). Überprüfen Sie [\ [SO \]: MCVE] (https://stackoverflow.com/help/mcve) oder [\ [SO \]: Fragen Sie nach] (https://stackoverflow.com/help/how-to- Fragen). Wie auch immer (es tut mir leid, dass der Einzug fehlt, aber in Kommentaren nicht möglich): 'def tree_sum (tree): wenn tree ist None: return 0 else: return tree.val + tree_sum (tree.left) + tree_sum (tree.right) '. – CristiFati

+0

Entschuldigung dafür, ich füge den vollständigen Code und die Frage Beschreibung hinzu. – Bramble

Antwort

0

Das Problem ist, dass Ihre result Liste enthält ein und dieselbe Liste mehrmals.

Sie Anhängen der tmp Liste result wie so:

self.result.append(tmp) 

Und dann sind Sie, dass die gleiche Liste mit tmp.pop() und tmp.append(...) mutiert. Aus diesem Grund sind alle Ihre Ergebnisse am Ende leere Listen.

Die Lösung ist einfach, nur eine Kopie Ihrer Liste erstellen:

self.result.append(tmp[:]) 
+0

Cool! Diese Frage hat mich drei Stunden lang beunruhigt. Danke, dass du mich aus der Folter befreit hast :) – Bramble