思路:
1.明确单链表的顺序是先序遍历的结果:根左右,保存到result中。
2.明确最终返回的不是链表,而是二叉树,只是树的左节点为空。
3.遍历result中的树节点,依次的左子树为空,右子树为下一个结点。
4.此时的root就是最终的二叉树。
class Node:
def __init__(self,value=None,left=None, right=None):
self.value = value
self.left = left
self.right = right
class Solution:
def flatten(self, root: TreeNode) -> None:
result = []
def preTraverse(root,result):
# 获取前序遍历的结果
if root == None:
return result
"一定要是树节点,而不是树结点的值"
result.append(root)
preTraverse(root.left,result)
preTraverse(root.right,result)
preTraverse(root,result)
"遍历result中的树节点,依次的左子树为空,右子树为下一个结点"
for i in range(1, len(result)):
prev, curr = result[i - 1], result[i]
prev.left = None
prev.right = curr
# 测试:
if __name__ == '__main__':
root = Node()
root = Node('1', Node('2', Node('3'), Node('4')), Node('5',right = Node('6')))
flatten(root)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)