Leetcode-114-二叉树展开为链表
发布日期:2021-09-23 21:27:22
浏览次数:5
分类:技术文章
本文共 1192 字,大约阅读时间需要 3 分钟。
题目描述
给定一个二叉树,原地将它展开为一个单链表。
示例
给定二叉树
1 / \ 2 5 / \ \3 4 6
将其展开为:
1 \ 2 \ 3 \ 4 \ 5 \ 6
题解
前序遍历
将二叉树进行前序遍历,获得各节点被访问到的顺序链表,遍历链表重组二叉树。
package maintype TreeNode struct { Val int Left *TreeNode Right *TreeNode}func flatten(root *TreeNode) { list := preorderTraversal(root) for i := 1; i < len(list); i++ { pre, cur := list[i-1], list[i] pre.Left, pre.Right = nil, cur }}func preorderTraversal(root *TreeNode) []*TreeNode { var list []*TreeNode if root != nil { list = append(list, root) list = append(list, preorderTraversal(root.Left)...) list = append(list, preorderTraversal(root.Right)...) } return list}
时间复杂度
O(n)
空间复杂度
O(n) 前驱节点
对于当前节点,如果左子树不为空,寻找左子树最右边的节点,置为前驱节点,将当前节点的右节点赋给前驱节点右节点,并将当前节点左节点赋给当前节点右节点,且把当前节点左节点置为空,更新当前节点右节点为新的当前节点,直到处理完所有节点。
package maintype TreeNode struct { Val int Left *TreeNode Right *TreeNode}func flatten2(root *TreeNode) { cur := root for cur != nil { if cur.Left != nil { next := cur.Left pre := next for pre.Right != nil { pre = pre.Right } pre.Right = cur.Right cur.Left, cur.Right = nil, next } cur = cur.Right }}
时间复杂度
O(n)
空间复杂度
O(1) 转载地址:https://blog.csdn.net/bodhiye/article/details/113278885 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月27日 17时10分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JavaScript实现的网页计算器功能
2019-04-26
英语四六级考试忘记准考证?怎么办?
2019-04-26
JavaScript内置对象
2019-04-26
JavaScript的游览器对象
2019-04-26
DOM对象,控制HTML对象
2019-04-26
制作一个表格,显示班级的学生信息
2019-04-26
JavaScript的选项卡操作
2019-04-26
Linux常用命令及文件处理命令
2019-04-26
Linux常见目录及作用
2019-04-26
文件链接命令
2019-04-26
Oracle篇--05 Oracle 视图、序列、约束
2019-04-26
【Java面试题四】sql面试题(1)
2019-04-26
【Java面试题五】sql面试题(2)
2019-04-26
【Java面试题六】多线程篇
2019-04-26
【Java面试题七】Java泛型篇
2019-04-26
【Java面试题八】Java算法优化篇
2019-04-26
JDBC与DAO篇--01 JDBC原理、JDBC基础编程
2019-04-26
【Java面试题九】算法篇
2019-04-26
架构设计与分层
2019-04-26