LeetCode热题100-二叉树展开为链表

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

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

示例 1:

复制代码
输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]
核心思路
  1. 找到当前节点左子树最右下节点
  2. 把该节点右指针指向当前节点的右子树
  3. 当前节点左子树挪到右侧,左指针置空
  4. 向右遍历,重复操作
python 复制代码
class Solution:
    def flatten(self, root: Optional[TreeNode]) -> None:
        """
        Do not return anything, modify root in-place instead.
        """
        if not root:
            return
        self.flatten(root.left)
        self.flatten(root.right)
        tmp = root.right
        root.right = root.left
        root.left = None

        p = root
        while p.right:
            p = p.right
        p.right = tmp
相关推荐
ccLianLian3 小时前
图论·刷题总结
算法·深度优先·图论
ECT-OS-JiuHuaShan3 小时前
什么是认知,认知的本质是什么?
数据库·人工智能·算法·机器学习·数学建模
Black蜡笔小新3 小时前
自动化AI算法训练服务器DLTM:筑牢数据安全底座,赋能企业AI高效安全落地
人工智能·算法·自动化
月殇_木言3 小时前
算法进阶(上)
算法
c++之路3 小时前
外观模式(Facade Pattern)
算法·外观模式
MicroTech20253 小时前
量子退火赋能金融,MLGO微算法科技构建量子金融生态
科技·算法·金融
晨曦中的暮雨3 小时前
4.16滴滴 AIOT 一面|面经
java·算法
BirdenT6 小时前
20260519紫题训练
c++·算法
csdn_aspnet11 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法