您的位置:首页 > 编程语言 > Python开发

[Leetcode]Flatten Binary Tree to Linked List

2015-01-17 23:14 405 查看
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.

Hints:
If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.
要求把一颗二叉树转换成一个链表~仔细观察的话可以发现 大概过程是把左子树设成右子树,把右子树连接到左子树的最右节点~所以过程是:先保存左子树root.left,然后找到左子树的最右节点pre,把这个最右节点的右子树(pre.right)设成root.right,把节点的右子树设成己保存的左子树,然后它的左子树设为空;
class Solution:
# @param root, a tree node
# @return nothing, do it in place
def flatten(self, root):
if root is None: return
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

下面这样写也可以~
class Solution:
# @param root, a tree node
# @return nothing, do it in place
def flatten(self, root):
if root is None: return
self.flatten(root.left)
self.flatten(root.right)
if root.left is None: return
pre = root.left
while pre.right:
pre = pre.right
pre.right = root.right
root.right = root.left
root.left = None
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode python