Flatten Binary Tree to Linked List

Flatten a binary tree to a fake "linked list" in pre-order traversal.

Here we use the_right_pointer in TreeNode as the_next_pointer in ListNode.

Example

              1
               \
     1          2
    / \          \
   2   5    =>    3
  / \   \          \
 3   4   6          4
                     \
                      5
                       \
                        6

Traverse Pre-Order

首先来看递归版本的,思路是先利用DFS的思路找到最左子节点,然后回到其父节点,我们需要一个 pointer last来保存父节点,然后

我们需要把右子树临时保存起来,因为把左子树添加到右子树位置时会把原先的右子树覆盖掉。再然后将原左子结点连上父节点的右子节点上,然后再把原右子节点连到新右子节点的右子节点上,然后再回到上一父节点做相同操作。

     1
    / \
   2   5
  / \   \
 3   4   6

     1
    / \
   2   5
    \   \
     3   6
      \    
       4

   1
    \
     2
      \
       3
        \
         4
          \
           5
            \
             6

递归后序遍历(Recursive Postorder Traversal)

这里对标准的递归后序遍历稍作改动,由“左-右-根”变更为“右-左-根”,详见代码。

没写完!!!!!

Last updated

Was this helpful?