第32天。
今天的题目是Flatten Binary Tree to Linked List:
Given a binary tree, flatten it to a linked list in-place.
For example, Given
The flattened tree should look like:
通过观察结果,我们可以发现它的顺序其实是一个先序遍历,那么我们可以先对树做一个先序遍历并记录节点指针,然后我们只需要将所有节点连接起来即可
考虑一下递归的去完成整个问题,我们可以先对左孩子和右孩子做一次flatten
,然后再讲他们按照适当的顺序连接起来:
上面的做法由于每次都需要对左孩子有一个一直往右的遍历,所以耗时还是挺大的,可以加入一个last指针,去表示最后一个被访问的节点的位置,为了保证正确性,我们必须先对右孩子进行flatten
再对左孩子进行flatten
.
然后是在dicuss
中看到的迭代算法: