когда я решу эту проблему Я должен разобраться с их требованием "Не возвращайте ничего, вместо этого измените root на месте". В моем подходе к решению этой проблемы кажется, что их средство проверки не увидит каких-либо изменений, внесенных в «root» после вызова функции «flatten (self, root: TreeNode)». Я пытался распечатать новое двоичное дерево перед выходом из функции, и оно кажется правильным.
Проблема в том, что, в отличие от c ++, где простой «&» хранит изменения в параметре, Python, похоже, не сохраняет изменения, так как я могу удовлетворить «Не возвращать ничего»? Пожалуйста, помогите мне, мне нужно много тренироваться на python для собеседования, и я понятия не имею, как решить эту проблему.
![https://leetcode.com/problems/flatten-binary-tree-to-linked-list/](https://i.stack.imgur.com/iVyMr.png)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def flatten(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
# get tree in preorder traverse
preordered = []
def preorder(root):
if root is not None:
preordered.append(root.val)
preorder(root.left)
preorder(root.right)
preorder(root) # for [1,2,5,3,4,null,6] creted preordered list as [1, 2, 3, 4, 5, 6] so it s ok
# construct a new tree with only right childs, from preordered list
root = TreeNode(preordered[0])
next_root = root
for i in range(1, len(preordered)):
new = TreeNode(preordered[i])
next_root.right= new
next_root = new
# it seems that root won t take change on checker and stays like how it was called