当前位置: 首页 > wzjs >正文

长沙小程序app开发seo引流什么意思

长沙小程序app开发,seo引流什么意思,新建网站软件,科技创新网站建设策划书更新时间:2025-04-04 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 114. 二叉树展开为链表 给你二…

更新时间:2025-04-04

  • 算法题解目录汇总:算法刷题记录——题解目录汇总
  • 技术博客总目录:计算机技术系列博客——目录页

优先整理热门100及面试150,不定期持续更新,欢迎关注!


114. 二叉树展开为链表

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

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

示例 1:

输入: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) 额外空间)展开这棵树吗?

方法一:迭代先序遍历(显式栈)

利用栈模拟先序遍历,维护前驱节点prev,实时修改指针建立链表。

  • 核心思想:利用栈按「根→右→左」顺序压入节点,确保弹出顺序为「根→左→右」。
  • 指针调整:维护前驱节点prev,每次将prevright指向当前节点,并清空left指针。
  • 空间优化:栈的深度为树高,平均空间复杂度为O(log n)

代码实现(Java):

public class Solution {public void flatten(TreeNode root) {if (root == null) return;Stack<TreeNode> stack = new Stack<>();stack.push(root);TreeNode prev = null;while (!stack.isEmpty()) {TreeNode current = stack.pop();// 将前驱节点的right指向当前节点,left置空if (prev != null) {prev.right = current;prev.left = null;}prev = current;// 先压入右子节点,再压入左子节点(栈的LIFO特性)if (current.right != null) stack.push(current.right);if (current.left != null) stack.push(current.left);}}
}

方法二:递归后序遍历(连接左右子树)

递归处理左右子树,将左子树连接到右子树之前,并更新末尾节点。

  • 核心思想:将左子树末尾连接到右子树头部,再让根节点指向左子树。
  • 末尾处理:返回展开后的最后一个节点,避免每次遍历链表末尾,时间复杂度优化至O(n)
  • 逻辑简化:通过后序遍历自底向上处理,确保左子树完全展开后再处理根节点。

代码实现(Java):

public class Solution {public void flatten(TreeNode root) {flattenHelper(root);}private TreeNode flattenHelper(TreeNode node) {if (node == null) return null;// 递归处理左右子树,获取展开后的末尾节点TreeNode leftTail = flattenHelper(node.left);TreeNode rightTail = flattenHelper(node.right);// 将左子树插入到当前节点与右子树之间if (node.left != null) {leftTail.right = node.right;node.right = node.left;node.left = null;}// 返回当前子树展开后的最后一个节点return (rightTail != null) ? rightTail : (leftTail != null) ? leftTail : node;}
}

复杂度分析

  • 时间复杂度:两种方法均为 O(n),每个节点被访问一次。
  • 空间复杂度
    • 迭代法:O(h),h为树高,最坏情况(链表结构)为O(n)
    • 递归法:O(h),递归栈深度为树高。

对比总结

  • 迭代法:适合大规模数据或树结构较深时,避免递归栈溢出。
  • 递归法:代码简洁,适合对代码可读性要求高,且无栈溢出风险的场景。

声明

  1. 本文版权归 CSDN 用户 Allen Wurlitzer 所有,遵循CC-BY-SA协议发布,转载请注明出处。
  2. 本文题目来源 力扣-LeetCode ,著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
http://www.dtcms.com/wzjs/319504.html

相关文章:

  • 外贸公司销售渠道二十个优化
  • 网站建设方案标准模板北京网站提升排名
  • 网站建设企业网站制作个人建网站需要多少钱
  • 整体网站构架交换链接营销
  • 南京公司网站建设如何制作一个网页
  • 抖音代运营是dp吗seo关键词搜索优化
  • 温州seo推广外包优化网站结构一般包括
  • dedecms 网站迁移如何网站关键词优化
  • 网站建设毕业报告现在怎么做网络推广
  • 网站建设衤金手指花总青岛网站建设培训学校
  • 新手自己做网站网络推广主要内容
  • wordpress添加站点百度世界排名
  • 做网站前端设计需要哪些证书免费发布推广信息的平台
  • 阿里云服务器 做网站重庆seo博客
  • 南通做网站优化企业网站推广建议
  • 天河网站建设企业武汉做seo
  • 网站用词精准性短链接在线生成官网
  • 转做批发鞋子的网站企业网络宣传推广方案
  • 西宁网站制作费用是多少crm
  • 公司变更登记申请书下载简述seo的概念
  • 网站和平台是一个意思吗可以访问违规网站的浏览器
  • 企业网站建设前言如何做好营销
  • 广告网站推广销售爱站网关键词
  • 成都电商网站网络营销策略的演变
  • 网站设计制作上海公司运营是做什么的
  • 在线培训系统平台官方正版清理优化工具
  • 广告机 东莞网站建设重庆关键词自然排名
  • 织梦网站做站群外贸推广如何做
  • 深圳品牌网站设计推广厦门百度开户
  • 网站建设新手指南地推扫码平台