您的位置:首页 > 其它

【M】【83】【leetcode题解】Flatten Binary Tree to Linked List

2015-12-11 20:48 337 查看
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
\
6


click to show hints.

Subscribe to see which companies asked this question

两种办法,第一种比较难,被注释了,不是很懂。
第二种方法解释如下:
Note that the problem requires in-place operation.The flatten procedure is like: cut the left child and set to right, the right child is then linked to
somewhere behind the left child. Where should it be then? Actually the right child should be linked to the most-right node of the left node. So the algorithm is as follows:

(1) store the right child (we call R)
(2) find the right-most node of left child
(3) set R as the right-most node's right child.
(4) set left child as the right child
(5) set the left child NULL
(6) set current node to current node's right child.

(7) iterate these steps until all node are flattened.

class Solution(object):
def __init__(self):
self.res = TreeNode(0)

def flatten(self, root):
if not root:
return
pre = None
while root:
if root.left:
pre = root.left
while pre.right:
pre = pre.right
pre.right = root.right
root.right = root.left
root.left = None
root = root.right

'''
def flatten(self, root):
if not root:
return
self.flatten(root.right)
self.flatten(root.left)
root.right = self.res.right
root.left = None
self.res.right = root
'''
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: