二叉树展开为链表的三种写法

二叉树展开为链表

在这里插入图片描述

链表头节点法
新建一个树形链表,前序遍历这个树,遍历到一个节点就往里插

class Solution {TreeNode dummyNode = new TreeNode(0,null,null);TreeNode p = dummyNode;public void flatten(TreeNode root) {if(root == null) return;//线序遍历这个树,然后往里插就完事了TreeNode l = root.left;TreeNode r = root.right;p.right = root;p.right.left = null;p=p.right;flatten(l);flatten(r);//再指回去root = dummyNode.right;}
}

连接法
每次找左子树最右的节点,然后连接即可

class Solution {//每一次找左子树最右的节点,然后连接public void flatten(TreeNode root) {TreeNode cur = root;while(cur!=null){if(cur.left!=null){TreeNode leftMaxRight = cur.left;while(leftMaxRight.right!=null)leftMaxRight = leftMaxRight.right;leftMaxRight.right = cur.right;cur.right = cur.left;cur.left =null;    }cur = cur.right;}}
}

倒着前序遍历法
这里有一种非常好的思路,就是在类里面定义一个变量,这个变量作为全局的变量,所有递归都能访问到,这样子就可以找到这个递归前一个节点了。

class Solution {TreeNode preNode;public void flatten(TreeNode root) {if(root==null) return ;flatten(root.right);flatten(root.left);root.left = null;root.right = preNode;preNode = root;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238757.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15.oracle的 listagg() WITHIN GROUP () 行转列函数使用

1.使用条件查询 查询部门为20的员工列表 -- 查询部门为20的员工列表 SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO 20 ; 效果: 2.使用 listagg() WITHIN GROUP () 将多行合并成一行(比较常用) SELECT T .DEPTNO, listagg (T .ENAME, ,) WIT…

知虾如何选品丨如何使用知虾进行选品和优化策略

在Shopee平台上作为卖家,如何进行选品和优化策略是一个至关重要的问题。而知虾作为一个为Shopee卖家提供数据分析的工具,可以帮助您更好地进行选品和优化策略。在本文中,我们将介绍如何使用知虾进行选品,并提供一些建议和步骤。 知…

python可视化之——seaborn简单图绘制指南

0. 主要内容 该笔记主要包括常见的:散点,折线,box,violin,等图的绘制,可以帮助我们了解数据存在的变量之间的某种关系或者数据趋势。在日常工作中,我们可以进行简单的数据分析和可视化&#xff…

零售数字化“逆熵”的6项原则和8种能力建设|ShopeX徐礼昭

作者:徐礼昭 来源:《三体零售逆熵法则》节选 旧的规则与秩序被打破,无序成为常态 新时代洪流裹挟冲击着传统零售 无序带来的“熵增”侵蚀企业生命 所有人都在不确定性中寻找确定 数字化如何助力企业铸就「反熵增」神器? 如何…

跨越鸿沟-颠覆性产品营销指南笔记

跨越鸿沟-颠覆性产品营销指南笔记 一、发现鸿沟 一、技术采用生命周期 技术采用生命周期 如果采用一个新产品,我们就得改变一贯的行为模式,或者改变我们依赖的其他产品或服务,那么,我们对技术采用的态度就变得很重要&#xff0c…

nodejs微信小程序+python+PHP学科建设管理信息系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Spring 多数据源搭建

目录 前言 正文 1.Druid 介绍和使用 2.其他多数据源解决方案 总结 前言 对于复杂的业务和项目,可能在一个单体项目中存在需要连接多个数据库的情况。这时,就会使用到多数据源,实际中遇到的可能性比较大。 正文 如果一个项目中需要连…

java企业财务管理系统springboot+jsp

1、基本内容 (1)搭建基础环境,下载JDK、开发工具eclipse/idea。 (2)通过HTML/CSS/JS搭建前端框架。 (3)下载MySql数据库,设计数据库表,用于存储系统数据。 (4…

从0开始学习JavaScript--JavaScript 单元测试

JavaScript单元测试是保障代码质量和可维护性的关键步骤之一。通过编写和运行单元测试,开发者可以确保代码在不断迭代的过程中依然具有正确的行为。本文将深入探讨JavaScript单元测试的核心概念、工具使用和最佳实践,并通过丰富的示例代码演示其实际应用…

leetcode-141-环形链表(C语言实现)

题目: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的…

学习笔记8——JUC入门基础知识

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/199561.html 进程和线程:进程是资源分配的最小单位,线程是CPU调度的最小单位 进程和线程的主要区别(总结)_进程和线程的区别-CSDN博客进程…

生物教师个人简历(精选21篇)

以下21篇简历内容以生物教师招聘需求为背景制作,大家可以灵活借鉴,希望能帮助大家在众多候选人中脱颖而出。 生物教师个人简历下载(在线制作):百度幻主简历或huanzhuv.com 生物老师简历1: 求职意向 求职…