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

【重点】【二叉树】114. 二叉树展开为链表

题目

法1:先序遍历

思路不够好

// 递归版遍历
class Solution {public void flatten(TreeNode root) {List<TreeNode> nodeList = new ArrayList<>();preorder(root, nodeList);for (int i = 0; i < nodeList.size(); ++i) {TreeNode curNode = nodeList.get(i);curNode.left = null;if (i == nodeList.size() - 1) {curNode.right = null;} else {curNode.right = nodeList.get(i + 1);}}}public void preorder(TreeNode root, List<TreeNode> res) {if (root == null) {return;}res.add(root);preorder(root.left, res);preorder(root.right, res);}
}// 迭代版遍历
class Solution {public void flatten(TreeNode root) {List<TreeNode> nodeList = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();while (root != null || !stack.isEmpty()) {if (root != null) {nodeList.add(root);stack.push(root);root = root.left;} else {TreeNode tmp = stack.pop();root = tmp.right;}}for (int i = 0; i < nodeList.size(); ++i) {TreeNode curNode = nodeList.get(i);curNode.left = null;if (i == nodeList.size() - 1) {curNode.right = null;} else {curNode.right = nodeList.get(i + 1);}}}
}

法2:规律+迭代解法

参考答案很多:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/solutions/17274/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by–26/?envType=study-plan-v2&envId=top-100-liked
重点记住下面这个!!!

class Solution {public void flatten(TreeNode root) {TreeNode cur = root;while (cur != null) {if (cur.left == null) {cur = cur.right;} else {TreeNode pre = cur.left; // 记录左子树的最右边节点while (pre.right != null) {pre = pre.right;}pre.right = cur.right;cur.right = cur.left;cur.left = null;cur = cur.right;}}}
}

相关文章:

  • 【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成
  • leetcode 100.相同的树
  • 非常抱歉的通知
  • linux 命令 tmux 用法详解
  • JVM实战-掌握分派方法规则
  • MyBatis 四大核心组件之 StatementHandler 源码解析
  • STM32——继电器
  • Photoshop Circular Text
  • 鸿蒙应用开发(二)环境搭建
  • Linux gtest单元测试
  • 前端组件库开发
  • 模型 心流
  • 【华为数据之道学习笔记】3-4主数据治理
  • 本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ
  • 使用Rust 构建C 组件
  • @angular/forms 源码解析之双向绑定
  • ES6 学习笔记(一)let,const和解构赋值
  • github从入门到放弃(1)
  • HTML中设置input等文本框为不可操作
  • JavaScript 奇技淫巧
  • Laravel 中的一个后期静态绑定
  • Protobuf3语言指南
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Sublime text 3 3103 注册码
  • Vultr 教程目录
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 基于webpack 的 vue 多页架构
  • 使用Swoole加速Laravel(正式环境中)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信小程序实战练习(仿五洲到家微信版)
  • 译米田引理
  • 正则表达式小结
  • nb
  • ​2021半年盘点,不想你错过的重磅新书
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #include到底该写在哪
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • ( 10 )MySQL中的外键
  • (C语言)二分查找 超详细
  • (C语言)球球大作战
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (补)B+树一些思想
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (七)c52学习之旅-中断
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)四层和七层负载均衡的区别
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...