Leetcode 114. 二叉树展开为链表

155 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习

一、题目描述

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

二、思路分析

  • 这道题还蛮有意思的难度为中等

  • 我看了网上的题解就是左子树插入到右子树的地方

  • 将原来的右子树接到左子树的最右边节点

  • 重复直到右子树为空

三、AC 代码:

class Solution {
      public void flatten(TreeNode root){
        //边界判断
        if(root == null) return;
        // 获取左子树
        TreeNode temp = root.left;
        // 将右子树赋值到左子树
        root.left = root.right;
        // 将左右子树交换
        root.right = temp;
        //获取最右边的节点
        TreeNode cur = root;
        while(cur.right != null)
            cur = cur.right;
        //将左子树拼接到右子树上
        cur.right = root.left;
        //左子树置空
        root.left = null;
        //递归
        flatten(root.right);
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 左右交换

    • 左边置空

最后这个算法是Leetcode的第114题,是热题100里的题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!