首页 > 其他分享 >leetcode 114. Flatten Binary Tree to Linked List 二叉树展开为链表(简单)

leetcode 114. Flatten Binary Tree to Linked List 二叉树展开为链表(简单)

时间:2022-09-06 16:11:17浏览次数:101  
标签:Binary right TreeNode cur 链表 二叉树 null 节点 left

一、题目大意

给你二叉树的根结点 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]

提示:

  • 树中结点数在范围 [0, 2000] 内

  • -100 <= Node.val <= 100

进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

思路:非迭代版实现,从根节点开始出发,先检测其左子节点是否存在,如存在则将根节点和其右节点断开,将左子节点及其后面所有结构一起连接到右子节点的位置,把原右子节点连到原左子节点为最后面的右子节点之后。

三、解题方法

3.1 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) {
        // 下面再来看非迭代版本的实现,这个方法是从根节点开始出发,先检测其左子结点是否存在,如存在则将根节点和其右子节点断开,
        // 将左子结点及其后面所有结构一起连到原右子节点的位置,把原右子节点连到元左子结点最后面的右子节点之后。代码如下:
        TreeNode cur = root;
        while (cur != null) {
            if (cur.left != null) {
                TreeNode p = cur.left;
                while (p.right != null) {
                    p = p.right;
                }
                p.right = cur.right;
                cur.right = cur.left;
                cur.left = null;
            }
            cur = cur.right;
        }
    }
}

四、总结小记

  • 2022/9/6 按起了葫芦起了瓢;都不愿意写文档,全凭个人经验来推动

标签:Binary,right,TreeNode,cur,链表,二叉树,null,节点,left
From: https://www.cnblogs.com/okokabcd/p/16662159.html

相关文章

  • 98.validate-binary-search-tree 验证二叉搜索树
    二叉搜索树定义:节点左子树只包含小于当前节点的数;节点右子树只包含大于当前节点的数;所有左子树和右子树自身必须也是二叉搜索树。实际上,若中序遍历二叉搜索树,所得序列......
  • jerry99的序列 --binary search, math
      #include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constintN=1e5+10;constintM=N-10;inttot,vis[N],prime[N];//#define......
  • Python3中二叉树前序遍历的迭代解决方案
    Python3中二叉树前序遍历的迭代解决方案ABinaryTree二叉树是分层数据结构,其中每个父节点最多有2个子节点。在今天的文章中,我们将讨论一个在大量技术编码面试中出现......
  • leetcode206:反转链表
    packagecom.mxnet;importjava.util.Stack;publicclassSolution206{publicstaticvoidmain(String[]args){}/***给你单链表的头节点......
  • 删除链表的倒数第N个节点
    删除链表的倒数第N个节点给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例1:输入:head=[1,2,3,4,5],n=2输出:[1......
  • leetcode-链表-19
    /***<p>给你一个链表,删除链表的倒数第&nbsp;<code>n</code><em>&nbsp;</em>个结点,并且返回链表的头结点。</p>**<p>&nbsp;</p>**<p><strong>示例1:</strong><......
  • Problem P07. [算法课分治] 链表排序(归并排序)
    采用归并算法,先将一个链表分成两个链表,分到不能再分,然后再将已经排好序的链表有序地归并起来。主要问题:1.一个子链表如何分成两个。2.释放空间的问题(没有实现)#inclu......
  • leetcode 104. Maximum Depth of Binary Tree 二叉树的最大深度(简单)
    一、题目大意给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,......
  • 数据结构与算法学习笔记———链表(Linked List)
    链表(LinkedList)#该篇笔记转自【Python】python链表_小周ipython的博客-CSDN博客_python链表简介链表(LinkedList):是一种线性表数据结构。他是用一组任意的存储单元(可......
  • LeetCode 617 在 JavaScript 中合并两个二叉树
    LeetCode617在JavaScript中合并两个二叉树问题陈述给你两棵二叉树根1和根2.想象一下,当您将其中一个覆盖另一个时,两棵树的某些节点重叠,而其他节点则不重叠。您需......