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


    目录
    相关文章
    |
    3天前
    leetcode代码记录(二叉树的所有路径
    leetcode代码记录(二叉树的所有路径
    8 0
    |
    3天前
    |
    索引
    每日一题:力扣328. 奇偶链表
    每日一题:力扣328. 奇偶链表
    12 4
    |
    4天前
    leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
    leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
    7 0
    |
    4天前
    leetcode代码记录(二叉树的最小深度
    leetcode代码记录(二叉树的最小深度
    8 0
    |
    4天前
    leetcode代码记录(二叉树的最大深度
    leetcode代码记录(二叉树的最大深度
    6 0
    |
    4天前
    leetcode代码记录(翻转二叉树
    leetcode代码记录(翻转二叉树
    5 0
    |
    4天前
    leetcode代码记录(二叉树的层序遍历
    leetcode代码记录(二叉树的层序遍历
    6 0
    |
    4天前
    |
    算法
    leetcode代码记录(二叉树递归遍历
    leetcode代码记录(二叉树递归遍历
    7 0
    |
    4天前
    leetcode代码记录(移除链表元素
    leetcode代码记录(移除链表元素
    10 0
    【每日一题】LeetCode——反转链表
    【每日一题】LeetCode——反转链表