java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)

leetcode刷题笔记-114. 二叉树展开为链表(java实现)

题目描述

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

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list

解题思路

1)把左子树和右子树拉平

2)左子树放到右子树位置,然后把右子树放到左子树下方

参考来源:https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/shou-ba-shou-shua-er-cha-shu-xun-lian-di-gui-si-wei/er-cha-shu-xi-lie-1

解题代码

/**

* 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) {

if(root == null) {

return;

}

flatten(root.left);

flatten(root.right);

//左右子树拉成平链

TreeNode left = root.left;

TreeNode right = root.right;

root.left = null;

root.right = left;

//把右子树挂在调整的链后边

TreeNode p = root;

while(p.right != null) {

p = p.right;

}

p.right = right;

}

}

点击并拖拽以移动

leetcode刷题笔记-114. 二叉树展开为链表(java实现) 相关文章

leetcode刷题笔记-116. 填充每个节点的下一个右侧节点指针(java实现)

题目描述 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节

leetcode刷题笔记-226. 翻转二叉树(java实现)

题目描述 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/invert-binary-tree 解题思路 经过观察,把二叉树的左右子节点进行交换,所有子节点

吴裕雄--天生自然 Zookeeper学习笔记--Zookeeper 节点特性

介绍一下 zookeeper 的节点特性和简单使用场景,正是由于这些节点特性的存在使 zookeeper 开发出不同的场景应用。 1、同一级节点 key 名称是唯一的实例:$ ls /$ create /runoob 2 2、创建节点时,必须要带上全路径实例:$ ls /runoob$ create /runoob/child

吴裕雄--天生自然 Zookeeper学习笔记--Zookeeper 四字命令

zookeeper 支持某些特定的四字命令与其交互,用户获取 zookeeper 服务的当前状态及相关信息,用户在客户端可以通过 telenet 或者 nc(netcat) 向 zookeeper 提交相应的命令。安装 nc 命令:$ yum install nc # centos或$ sudo apt install netcat # ubuntu

吴裕雄--天生自然 Zookeeper学习笔记--Zookeeper Java 客户端搭建

使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命名为 zookeeper-demo,并且引入如下依赖,可以自行在maven中央仓库选择合适的版本,介绍原生 API 和 Curator 两种方式。 dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.11/ver

吴裕雄--天生自然 Zookeeper学习笔记--ZooKeeper 数据模型 znode 结构详解

数据模型在 zookeeper 中,可以说 zookeeper 中的所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。进入 zookeeper 安装的 bin 目录,通过sh zk

吴裕雄--天生自然 Zookeeper学习笔记--Zookeeper 安装配置

Linux 安装zookeeper 下载地址为: https://zookeeper.apache.org/releases.html。 打开网址 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz,看到如下界面: 选择一个下载地址,使用 wget 命令下载并安装:$ wg

redis6.0.5之zset阅读笔记4--压缩列表(ziplist)排序集相关API

***********************************************************************************************获取压缩链表中节点的数值double zzlGetScore(unsigned char *sptr) { unsigned char *vstr; unsigned int vlen; long long vlong; char buf[128]; double

吴裕雄--天生自然 Zookeeper学习笔记--Zookeeper linux 服务端集群搭建步骤

所需准备工作,创建三台虚拟机环境并安装好 java 开发工具包 JDK,可以使用 VM 或者 vagrant+virtualbox 搭建 centos/ubuntu 环境,本案例基于宿主机 windows10 系统同时使用 vagrant+virtualbox 搭建的 centos7 环境,如果直接使用云服务器或者物理机同理。

算法刷题及总结_数组篇

二分法 //算法总结//第一部分:数组相关/***Leetcode题目35:搜索插入位置*给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。*示例 1:*输入: [1,3,5,6], 5*输出: 2**示例 2:*输入

你可能感兴趣的:(java二叉树转换为链表)