算法题:二叉树展开为链表

目录

 

题目描述

解题思路 


题目描述

给定一个二叉树,原地将它展开为一个单链表。

例如,给定二叉树

    1
   / \
  2   5
 / \   \
3   4   6

将其展开为:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

解题思路 

我们需要两步完成这道题。

  • 将左子树插入到右子树的地方

  • 将原来的右子树接到左子树的最右边节点

考虑新的右子树的根节点,一直重复上边的过程,直到新的右子树为 null

扫描二维码关注公众号,回复: 11945083 查看本文章
func flatten(root *TreeNode)  {
    for root != nil {
        if root.Left == nil {
            root = root.Right
        }else {
            pre := root.Left
            for pre.Right != nil {
                pre = pre.Right
            }
            pre.Right = root.Right
            root.Right = root.Left
            root.Left = nil
            root = root.Right
        }
    }
}

猜你喜欢

转载自blog.csdn.net/ITqingliang/article/details/107905368