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