leetcode114—二叉树展开为链表
关键字:二叉树 前序遍历
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
解法
1. 前序遍历存储
题目连接结点的顺序符合前序遍历的顺序,因此使用一个列表依次存储前序遍历访问的结点并将其存储起来。
最后再依次相连。
class Solution:
def flatten(self, root: TreeNode) -> None:
# 前序遍历列表储存结点 再依次相连
prelist = []
# 前序遍历负责储存
def preorder(node):
if node:
prelist.append(node)
preorder(node.left)
preorder(node.right)
# 负责相连
preorder(root)
for i in range(len(prelist)-1):
prelist[i].left = None
prelist[i].right = prelist[i+1]
复杂度分析:
- 时间复杂度: O ( n ) O(n)