【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
The flattened tree should look like:
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.
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 '''
相关文章推荐
- 常见的python的unitest用法
- android项目获得所有运行程序
- leetcode Longest Valid Parentheses
- libxml2的安装及使用
- Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(2)- Peterson解法
- BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )
- java中的集合之Collection(一)
- NVIDIA DIGITS2 Deep Convolutional Feature Visualization
- PAT乙级 月饼 (25)
- [TwistedFate]UICollectionView
- 经典算法题——五家共井
- javascript setAttribute使用兼容
- 揭开 Growth Hacking 的神秘面纱(番外篇)+ 大结局
- AndroidStuidio错误之JAR包依赖冲突问题
- 前人栽树后人乘凉
- 8_排序二叉树插入
- leetcode Valid Sudoku
- Watches
- 汇编 DOS的中断调用 INT 21H
- Linux 动态链接库