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
解法1: Divide & Conquer
思路是对于每一个节点,如果有left和right两个child, 对left和right分别做flatten的话,只需要把left的child和right的root相连,同时把left的root设为NULL. 然后把root和left的root相连就得到了flatten的list。
具体实现起来的时候,可以建立一个辅助的struct来存储每一个节点对应的flatten之后的root和child。
C++
Java
解法2: Preorder traversal
从给的例子可以看到,最后的顺序是一个preorder traversal。 那么我们可以先进行preorder, 然后把vector中的node都连接起来。
C++
解法3: Iterative
基本思想就是从上往下,如果有left child就把最右端的接到right child上,然后把left child移到左边。然后再按照路劲往下一个node,也就是说root = root.right