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

leetcode hot100【LeetCode 114.二叉树展开为链表】java实现

LeetCode 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]

Java 实现代码

/*** 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 {public void flatten(TreeNode root) {while (root != null) {// 左子树为 null,直接考虑下一个节点if (root.left == null) {root = root.right;} else {// 找左子树最右边的节点TreeNode pre = root.left;while (pre.right != null) {pre = pre.right;}// 将原来的右子树接到左子树的最右边节点pre.right = root.right;// 将左子树插入到右子树的地方root.right = root.left;root.left = null;// 考虑下一个节点root = root.right;}}}
}

解题思路

  1. 遍历二叉树:使用一个 while 循环遍历二叉树的每个节点。
  2. 处理左子树为空的情况:如果当前节点的左子树为空,则直接移动到右子树。
  3. 处理左子树不为空的情况
    • 找到左子树中最右边的节点。
    • 将当前节点的右子树接到左子树最右边节点的右指针上。
    • 将左子树移动到右子树的位置。
    • 清空当前节点的左子树指针。
    • 移动到下一个节点。
  4. 循环结束条件:当 rootnull 时,表示所有节点都已经被处理,循环结束。

复杂度分析

  • 时间复杂度:O(n),其中 n 是树中的节点数。每个节点都会被访问一次。
  • 空间复杂度:O(1),只需要常数级别的额外空间来存储指针和进行操作,不依赖于树的大小。
http://www.lryc.cn/news/483433.html

相关文章:

  • SpringMVC学习记录(二)之接收数据
  • C语言串讲-3之函数和数组
  • 设计模式-状态模式(State)
  • c语言中的文件操作(2)
  • 【Verilog】case、casex、casez的区别
  • Seata源码笔记(二)
  • 【Java SE】接口类型
  • [代码随想录Day10打卡] 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
  • redis:RDB和AOF机制
  • 券商隔夜单自动下单交易接口
  • 生成任意3D和4D场景!GenXD:通用3D-4D联合生成框架 | 新加坡国立微软
  • 通过命令学习k8s
  • 【redis】—— 初识redis(redis基本特征、应用场景、以及重大版本说明)
  • 服务器显卡和桌面pc显卡有什么不同
  • Chrome使用IE内核
  • 类和对象(C++)——默认成员函数,构造函数,析构函数
  • 深入理解 Vue v-model 原理与应用
  • 内网域环境、工作组、局域网等探针方案
  • uniapp—android原生插件开发(3Android真机调试)
  • goframe开发一个企业网站 统一返回响应码 18
  • 基于STM32的智能门禁系统设计
  • Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归
  • 知识见闻 - 苹果手机拨号键长按
  • 在 KubeVirt 中使用 GPU Operator
  • 安慰剂检验Stata代码(全套代码、示例数据及参考文献)
  • DAY6 线程
  • 基于STM32的智能门锁系统设计思路:蓝牙、RFID等技术
  • AndroidStudio-广播
  • 基于表格滚动截屏(表格全部展开,没有滚动条)
  • 洛谷P1255