'''这是二叉树的定义'''
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
'''这是路径函数'''
def dfs(node, result, tmp):
if node == None:
return
tmp.append(node)
if node.left == None and node.right == None:
result.append([i.val for i in tmp])
return
dfs(node.left, result, tmp)
dfs(node.right, result, tmp)
Ini adalah kod saya, tetapi ia mencetak semua nod setiap kali. Kemudian DEBUG mendapati bahawa setiap kali ia berulang ke subpokok kanan, tatasusunan tmp akan mengekalkan keadaan subpokok kiri sebelum melintasinya, yang bukan keadaan dari akar ke subpokok kanan sama sekali.
Adakah ini isu skop? Tetapi saya tidak dapat mencari cara untuk menyelesaikannya, jadi saya meminta jawapan di sini, terima kasih
Ini masalah skop mungkin tidak banyak masalah dengan algoritma anda Perkara utama ialah anda perlu tahu bahawa apabila melalui parameter ke fungsi, terutamanya apabila menghantar parameter berubah (dalam kes anda, ia adalah senarai. ), anda perlu ingat tak terkira. Masalah anda di sini tertumpu terutamanya pada tmp Sebab mengapa keadaan subpokok kiri dikekalkan adalah kerana apabila anda melintasi subpokok kiri, anda menambah subpokok kiri pada tmp, dan kemudian anda membuat panggilan rekursif seterusnya Letakkan tambah. senaraikan ke dalam senarai Jika hanya terdapat subtree kiri, tiada masalah. Keupayaan ekspresi bahasa saya adalah terhad, jadi saya akan menyiarkan kod yang diubah suai untuk anda lihat