Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1
/ \
2 5
/ \ \
3 4 6
The flattened tree should look like:
1
\
2
\
3
\
4
\
5
\
For example,
Given
1
/ \
2 5
/ \ \
3 4 6
The flattened tree should look like:
1
\
2
\
3
\
4
\
5
\
6
最近在刷面经,老看到考这题,于是又写了一遍。
we can use recursion to solve this problem. Define a prenode first, then in the recursion, everytime we put the left node as null and the right node as the new root.
remember we need to preserve the right root, otherwise the right root maybe replaced.
time complexity is O(n) space is logn
code is as follow.
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return nothing, do it in place
def solve(self,root):
if root==None:
return
if self.prenode!=None:
self.prenode.left=None
self.prenode.right=root
self.prenode=root
left=root.left
right=root.right
self.solve(left)
self.solve(right)
return root
def flatten(self, root):
Solution.prenode=None
self.solve(root)
return root
二叉树展平为链表
本文介绍了一种将二叉树通过递归方式展平为链表的方法。通过调整节点指针,使得每个节点的左子节点为空,右子节点成为下一个节点,最终形成链表结构。此算法的时间复杂度为O(n),空间复杂度为log n。
824

被折叠的 条评论
为什么被折叠?



