题目描述:
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def flatten(self, root):
res = []
def PreOrder(root):
if not root: # 递归终止条件:传入的TreeNode为None
return
res.append(root) # 添加整个树节点
PreOrder(root.left)
PreOrder(root.right)
PreOrder(root)
# 恢复成链表结构
for i in range(1, len(res)):
prev, curr = res[i - 1], res[i]
prev.left = None
prev.right = curr
return res
由于在定义节点时已经默认左右指针指向None,故在恢复成链表结构时,不用单独处理最后一个节点(处理反而要单独判断输入为[]的情况)