LeetCode 114. 二叉树展开为链表

简介: LeetCode 114. 二叉树展开为链表

 114. 二叉树展开为链表

给你二叉树的根结点 root ,请你将它展开为一个单链表:

    • 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null
    • 展开后的单链表应该与二叉树 先序遍历 顺序相同。

    示例 1:

    image.gif 编辑

    输入:root = [1,2,5,3,4,null,6]

    输出:[1,null,2,null,3,null,4,null,5,null,6]


    示例 2:

    输入:root = []

    输出:[]


    示例 3:

    输入:root = [0]

    输出:[0]


    提示:


    树中结点数在范围 [0, 2000]

    -100 <= Node.val <= 100

    进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?


    思路:dfs + 前序遍历

    时间复杂度:O(N)

    空间复杂度:O(N)

    /*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/funcflatten(root*TreeNode)  {
    preOrderList :=dfs(root)
    fori :=1; i<len(preOrderList); i++ {
    preOrderList[i-1].Left=nilpreOrderList[i-1].Right=preOrderList[i]
        }
    }
    funcdfs(node*TreeNode) []*TreeNode {
    varres []*TreeNode// 注意:定义局部数组变量ifnode==nil {
    returnres    }
    res=append(res, node)
    res=append(res, dfs(node.Left)...)    // 语法糖res=append(res, dfs(node.Right)...)
    returnres}

    image.gif


    目录
    相关文章
    |
    4月前
    【力扣】-- 移除链表元素
    【力扣】-- 移除链表元素
    49 1
    |
    2月前
    |
    数据库
    数据结构中二叉树,哈希表,顺序表,链表的比较补充
    二叉搜索树,哈希表,顺序表,链表的特点的比较
    数据结构中二叉树,哈希表,顺序表,链表的比较补充
    |
    4月前
    【LeetCode 31】104.二叉树的最大深度
    【LeetCode 31】104.二叉树的最大深度
    37 2
    |
    4月前
    【LeetCode 29】226.反转二叉树
    【LeetCode 29】226.反转二叉树
    34 2
    |
    4月前
    【LeetCode 28】102.二叉树的层序遍历
    【LeetCode 28】102.二叉树的层序遍历
    26 2
    |
    4月前
    【LeetCode 43】236.二叉树的最近公共祖先
    【LeetCode 43】236.二叉树的最近公共祖先
    31 0
    |
    4月前
    【LeetCode 38】617.合并二叉树
    【LeetCode 38】617.合并二叉树
    28 0
    |
    4月前
    【LeetCode 37】106.从中序与后序遍历构造二叉树
    【LeetCode 37】106.从中序与后序遍历构造二叉树
    32 0
    |
    4月前
    【LeetCode 34】257.二叉树的所有路径
    【LeetCode 34】257.二叉树的所有路径
    35 0
    |
    4月前
    【LeetCode 32】111.二叉树的最小深度
    【LeetCode 32】111.二叉树的最小深度
    27 0