Это алгоритм обрезки двоичного дерева. Например:
1 1
/ \ \
0 1 => 1
/ \ / \ \
0 00 1 1
У меня уже есть рекурсивный метод для решения этой проблемы, а именно
def pruneTree_recursion(root):
if root is None:
return None
root.left = pruneTree_recursion(root.left)
root.right = pruneTree_recursion(root.right)
return root if root.val == 1 or root.left or root.right else None
Но у меня также есть другой способ решения этой проблемы, который также использует postorder
, чтобы сократить отпуск один за другим.
def pruneTree(root):
def postorder(root, orderlist):
if root:
postorder(root.left, orderlist)
postorder(root.right, orderlist)
orderlist.append(root)
return orderlist
orderlist = postorder(root, [])
for node in orderlist:
if node.val == 0:
if (node.left is None) and (node.right is None):
node = None # May be the problem is here [1]
return root
Если я изменю код в [1] на node.val = 88
, это сработает. Каждое место, которое нужно вырезать, станет 88. Но когда я использую node = None
. Не работает Дерево все равно будет оригинальным. Как это получилось? Как это исправить. Спасибо всем, кто может мне помочь.