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

力扣114. 二叉树展开为链表(java,用树模拟链表)

Problem: 114. 二叉树展开为链表

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

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

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

在这里插入图片描述
在这里插入图片描述

思路

我们易知,树与链表两种数据结构都可以通过指针操作来实现,换一句说两种数据结构都可以归结为一种链式数据结构只不过一般情况下,一般普通链表每一个节点后都只有一个next指针;一般的二叉树每个节点后都会有两个指针left指针和right指针,所以我们即可想到使用一个树来模拟实现链表!!!

image.png

1.创建虚拟头节点和尾指针,尾指针初始化指向虚拟头节点。
2.每次遍历过程中将上一节点的right指针指向当前节点,上一节点的left指针置为null
image.png

解题方法

1.创建虚拟头节点和尾指针,尾指针初始化指向虚拟头节点。
2.编写辅助的前序遍历函数,每次先取出当前节点的左右子树,再将每次按先序遍历的到的节点添加到尾指针后

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {//创建虚拟头节点private TreeNode dummyHead = new TreeNode();//创建尾指针private TreeNode tail = dummyHead;/*** 将一个二叉树展开为一个单链表** @param root 树的根节点*/public void flatten(TreeNode root) {preOrder(root);}/*** 先序遍历,将每次遍历到的节点添加到链表中** @param root 树的根节点*/private void preOrder(TreeNode root) {if (root == null) {return;}//先取出当前节点的左右节点TreeNode leftNode = root.left;TreeNode rightNode = root.right;//把遍历到的节点放在链表中tail.right = root;tail = root;tail.left = null;preOrder(leftNode);preOrder(rightNode);}}
http://www.lryc.cn/news/243020.html

相关文章:

  • 学生成绩管理系统(python实现)
  • 【Leetcode合集】1410. HTML 实体解析器
  • 04-React脚手架 集成Axios
  • 时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测
  • 【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)
  • 【【Linux系统下常用指令学习 之 二 】】
  • Git-将指定文件回退到指定版本
  • docker环境安装
  • 【Java】智慧工地云平台源码(APP+SaaS模式)
  • 2016年11月10日 Go生态洞察:七年的Go语言旅程
  • 深入了解Java中SQL优化的关键技巧与实践
  • 6.3.WebRTC中的SDP类的结构
  • ArcGis如何用点连线?
  • 自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)
  • 造一个float类型二维矩阵,并将二维矩阵存快速储到一个float*中(memcpy)
  • python通过继承、组合、委托组织类
  • OSG粒子系统与阴影-自定义粒子系统示例<1>(4)
  • 激活函数与其导数:神经网络中的关键元素
  • 微信公众号对接获取用户openid预约项目心路全历程
  • 大中小协作 共筑科学梦——华中科技大学附属花城中学举办首届科技节
  • ElasticSearch之Health API
  • 图的建立基本操作
  • 影响语音芯片识别率的因素概述
  • 操作系统的主要功能--处理机、存储器、设备、文件
  • PDF 批量处理软件BatchOutput PDF mac中文版介绍
  • oracle安装的肘腋之疾小合集
  • django(千锋教育)
  • Python 前后端分离项目Vue部署应用
  • Linux中安装MySQ-合集
  • elk 简单操作手册