题目描述:
给你二叉树的根结点 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,故在恢复成链表结构时,不用单独处理最后一个节点(处理反而要单独判断输入为[]的情况)