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

【LeetCodehot100】T114:二叉树展开为链表 T105:从前序与中序遍历构造二叉树

T114:二叉树展开为链表

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

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

核心思路

前序遍历顺序+指针重排

具体操作:

  1. 先展开左子树
  2. 再展开右子树
  3. 把左子树移到右边
  4. 把原右子树接到末尾

代码实现

publicvoidflatten(TreeNoderoot){if(root==null)return;// 1️⃣ 递归展开左右子树flatten(root.left);flatten(root.right);// 2️⃣ 保存原右子树TreeNoderight=root.right;// 3️⃣ 左子树移到右边root.right=root.left;root.left=null;// 4️⃣ 找右链尾节点TreeNodecur=root;while(cur.right!=null){cur=cur.right;}// 5️⃣ 接上原右子树cur.right=right;}

本题感悟

掌握前序遍历顺序+指针重排的具体流程

  1. 先展开左子树
  2. 再展开右子树
  3. 把左子树移到右边
  4. 把原右子树接到末尾

T105:从前序与中序遍历构造二叉树

题目要求:
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

核心思路

前序遍历
根 → 左 → 右
作用:

确定“根节点”
中序遍历

左 → 根 → 右
作用:

划分左右子树

前序找根,中序分左右,递归构建

思路

1️⃣ 用 preorder[preL] 找到根
2️⃣ 在 inorder 中找到根的位置 index
3️⃣ 计算左子树大小 leftSize
4️⃣ 划分左右子树范围
5️⃣ 递归构建左右子树

代码实现

classSolution{Map<Integer,Integer>map=newHashMap<>();publicTreeNodebuildTree(int[]preorder,int[]inorder){// 建立中序索引for(inti=0;i<inorder.length;i++){map.put(inorder[i],i);}returnbuild(preorder,0,preorder.length-1,inorder,0,inorder.length-1);}privateTreeNodebuild(int[]preorder,intpreL,intpreR,int[]inorder,intinL,intinR){if(preL>preR)returnnull;// 1️⃣ 根节点introotVal=preorder[preL];TreeNoderoot=newTreeNode(rootVal);// 2️⃣ 找中序位置intindex=map.get(rootVal);// 3️⃣ 左子树大小intleftSize=index-inL;// 4️⃣ 左子树root.left=build(preorder,preL+1,preL+leftSize,inorder,inL,index-1);// 5️⃣ 右子树root.right=build(preorder,preL+leftSize+1,preR,inorder,index+1,inR);returnroot;}}
http://www.cnnetsun.cn/news/1457533.html

相关文章:

  • 为什么你家WiFi满格,网却很慢?90%的人都理解错了
  • Google Hacking 高级搜索技巧与实战案例解析
  • Win11Debloat开源工具:系统性能优化的全方位解决方案
  • YOLOv11实战:用C3K2和C2PSA模块提升你的目标检测模型(附PyTorch代码)
  • 海宁市停车设施专项规划 2024
  • IsaacLab 训练范式探索(一):让机器人拥有“记忆”的 RNN 策略
  • 基数排序笔记
  • mmdetection实战:从混淆矩阵到精准评估,手把手计算P、R、F1
  • 安装flash-attn
  • TFT LCD屏幕硬件解析:从TN到IPS,如何选择适合你项目的显示技术?
  • Shardingsphere-Proxy 5.5.0数据迁移实战:从单机到集群的平滑过渡
  • 告别臃肿控制软件:GHelper让你的华硕笔记本性能飙升
  • 【Qt视频实战】基于QMediaPlayer与QVideoWidget的RTSP流媒体播放器开发指南
  • 【递归算法】找出所有子集的异或总和再求和
  • nlp_structbert模型API的流式调用与异步处理模式详解
  • 为什么你的LangChain服务每48小时必崩?——用我们自研的MemTrace-Py工具10分钟定位GC失效根源
  • 第十八篇:【硬件工程师筑基系列 4-1】原理图设计入门与工具全指南 | 从工程搭建到绘制全流程(AD24 版)
  • mPLUG视觉问答:本地图片分析神器,支持jpg/png,英文提问秒回答案
  • UndertaleModTool全流程指南:GameMaker游戏深度定制与扩展解决方案
  • Wan2.1-umt5快速开始:使用CSDN星图平台镜像一键启动
  • ITU-R BT.2124建议书标准解读和应用指南-读懂如何“称”出颜色差了多少
  • 构建卡证处理自动化流水线:模型与传统图像处理技术结合
  • RAG数据清洗三大关键
  • 科技成果转化被纳入高校评价体系后,青年教师怎么办?
  • VSCode 接入 Codex(基于 sub2api 的完整实战指南)
  • 高效AI论文工具合集,支持智能降重与自然语言润色,减少重复内容
  • 977. 有序数组的平方
  • Nanobot环境下的OpenClaw优化:CNN图像识别性能提升50%
  • 别再被浏览器红叉吓到!手把手教你用OpenSSL自签证书搞定本地HTTPS开发环境
  • Wan2.1 VAE快速上手:Anaconda虚拟环境配置与依赖一键安装