[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
The flattened tree should look like:
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
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 - Flatten Binary Tree to Linked List
- LeetCode-Flatten Binary Tree to Linked List
- leetcode Flatten Binary Tree to Linked List
- [LeetCode] Flatten Binary Tree to Linked List
- [leetcode]Flatten Binary Tree to Linked List
- leetcode--Flatten Binary Tree to Linked List
- [Leetcode] Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- [Leetcode]Flatten Binary Tree to Linked List
- [leetcode] Flatten Binary Tree to Linked List
- leetcode - Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- 【leetcode】Flatten Binary Tree to Linked List
- leetcode: Flatten Binary Tree to Linked List
- [LeetCode]Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- [leetcode]Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List