Bei einem binären Baum prüfen, ob es ein Spiegel von sich selbst ist (dh symmetrisch um sein Zentrum).symmetrischer Baumalgorithmus (Invert + gleicher Baum)
Es ist eine Frage zu Leetcode. Was ich tue ist, den Baum zu invertieren und dann zu vergleichen, ob der umgekehrte Baum derselbe wie der ursprüngliche Baum ist. Aber ich kann den Testfall nicht bestehen. Mein Code ist wie folgt, kann mir jemand einen Vorschlag geben? Vielen Dank.
Klasse Solution (Objekt):
def isSymmetric(self, root):
node = self.invert(root)
def dfs(root, node):
if not root and not node:
return True
if not root or not node:
return False
if root.val == node.val and dfs(root.left, node.left) and dfs(root.right, node.right):
return True
else:
return False
return dfs(root, node)
def invert(self, node):
if node:
node.left, node.right = self.invert(node.right), self.invert(node.left)
return node
Vielen Dank für Ihre Antwort. Ich kann Ihre Methode verstehen, habe aber immer noch Probleme mit meiner Methode. Denkst du, meine Logik (zuerst den Baum invertieren und dann den inversen Baum mit dem Original vergleichen) ist richtig? –
Sie müssen verstehen, dass Leetcode Testfall sogar bei Timeout fehlschlagen kann. Die umgekehrte Logik sieht für mich korrekt aus. Versuchen Sie es lokal auszuführen und drucken Sie es aus, um das Ergebnis zu sehen. –
Es ergab sich für folgenden Baum. bedeutet dfs Logik ist falsch. Es schlägt bei der ersten Bedingung fehl, da es immer true zurückgibt, wenn beide Knoten keine sind: root = node (2) root.left = Knoten (3) root.right = Knoten (4) root.left.left = Knoten (5) –