二叉树搜索树与双向链表

一:题目

二:思路

把二叉搜索树的值升序的打印出来,中序打印即可,但是此题不仅仅是有序的打印出二叉搜索树的值,而是要将其的结构也改变了,也就是说要改变节点间的指向,让其成为一个双向链表

我们在中序遍历的时候,会依次得到4 6 8 10 12 14 16,那我们在依次得到这些节点值的时候,将彼此之间进行链接即可

如图所示:

三:代码 

class Solution {//中序遍历 进行链接void InOrderConvert(TreeNode* cur,TreeNode*& prev){//cur为空return即可if(cur==nullptr)return;//左子树递归InOrderConvert(cur->left, prev);//对cur和prev的链接if(prev!=nullptr)cur->left = prev;if(prev!=nullptr)prev->right = cur;//链接完成 cur赋给了prev//cur继续中序遍历得到下一个中序节点prev = cur;//右子树递归InOrderConvert(cur->right, prev);}
public:TreeNode* Convert(TreeNode* pRootOfTree) {//二叉搜索树就是空树 则返回nullptrif(pRootOfTree==nullptr)return nullptr;//为调用InOrderConvert函数创建参数TreeNode* prev = nullptr;//第一个参数就是根节点 第二个参数是为nullptr的prevInOrderConvert(pRootOfTree, prev);//走到这里 代表双向链表已经完成了TreeNode* head = pRootOfTree;//所以我们要找到双向链表的第一个元素//也就是二叉搜索树的最小值//即一直遍历左树 最后一个节点 即为最小节点while(head->left){head = head->left;}//返回return head;}
};

解释:

InOrderConvert的参数:

cur:当前正在处理的节点

prev:指向前一个处理过的节点的指针(引用传递,以便在递归调用间保持更新)

步骤:

递归处理左子树

InOrderConvert(cur->left, prev);

处理当前节点:

将当前节点的左指针(left)指向prev,将prev的右指针(right)指向当前节点,更新prev为当前节点

        if(prev!=nullptr)cur->left = prev;if(prev!=nullptr)prev->right = cur;prev = cur;

递归处理右子树

InOrderConvert(cur->right, prev);

解释:中序遍历就是左根右,我们想做什么都是在 根 的这个方框里面做的,这道题是链接节点,若是按照下图,则变成了遍历打印,所以递归中序,前序,后序,都只是三个框的顺序不同罢了,当然也不要忘记空节点的判断,递归一定需要返回条件的!

这就变成了打印~ 

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

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

相关文章

31天Python入门——第17天:初识面向对象

你好,我是安然无虞。 文章目录 面向对象编程1. 什么是面向对象2. 类(class)3. 类的实例关于self 4. 对象的初始化5. __str__6. 类之间的关系继承关系组合关系 7. 补充练习 面向对象编程 1. 什么是面向对象 面向对象编程是一种编程思想,它将现实世界的概念和关系映…

Spring Boot中常用内嵌数据库(H2、HSQLDB、Derby)的对比,包含配置示例和关键差异总结

以下是Spring Boot中常用内嵌数据库的对比,包含配置示例和关键差异总结: 一、主流内嵌数据库对比 1. H2 数据库 特点: 支持内存模式(速度快)和文件模式(数据持久化)。支持SQL方言&#xff08…

Apache Hive和Snowflake的`CREATE VIEW`语法和功能特性整理的对比表

写一个Apache Hive中CREATE VIEW语句转换为对应Snowflake中CREATE VIEW语句的程序,现在需要一个根据功能的相似性对应的Apache HiveQL和Snowflake SQL的CREATE VIEW语句的表。 以下是基于Apache Hive的CREATE VIEW语法规则构造的所有可能合法语句实例及其功能说明&…

个人博客网站从搭建到上线教程

步骤1:设计个人网站 设计个人博客网站的风格样式,可以在各个模板网站上多浏览浏览,以便有更多设计网站风格样式的经验。 设计个人博客网站的内容,你希望你的网站包含哪些内容如你的个人基本信息介绍、你想分享的项目、你想分享的技术文档等等。 步骤2:选择开发技术栈 因…

PHP回调后门

1.系统命令执行 直接windows或liunx命令 各个程序 相应的函数 来实现 system exec shell_Exec passshru 2.执行代码 eval assert php代码 系统 <?php eval($_POST) <?php assert($_POST) 简单的测试 回调后门函数call_user_func(1,2) 1是回调的函数 2是回调…

Raspberry 树莓派 CM4模块的底板设计注意事项

1&#xff0c; 树莓派CM4底板设计 树莓派CM4模块集成了CPU&#xff0c; 存储器&#xff0c;以太网&#xff0c; 无线模块&#xff0c;电源等等&#xff0c; 大大降低了硬件设计的要求。对我们使用树莓派提供了很好的便利性。 本人近期因为项目的需要设计了一款CM4的底板&#x…

Java后端开发(十八)-- 使用JAXB,将JavaBean转换XML文本

下面是测试时的运行环境: 1.jdk8 2.Maven,可能需要需要的依赖,如下: <dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><gr…

【一起来学kubernetes】30、k8s的java sdk怎么用

Kubernetes Java SDK 是开发者在 Java 应用中与 Kubernetes 集群交互的核心工具&#xff0c;支持资源管理、服务发现、配置操作等功能。 一、主流 Java SDK 对比与选择 官方 client-java 库 特点&#xff1a;由 Kubernetes 社区维护&#xff0c;API 与 Kubernetes 原生对象严格…

PHP开发者2025生存指南

PHP&#xff0c;这个曾经被戏称为“世界上最好的语言”的脚本语言&#xff0c;依旧在网络世界占据着重要的地位。然而&#xff0c;技术发展日新月异&#xff0c;面向2025年&#xff0c;PHP开发者要想保持竞争力甚至实现职业生涯的飞跃&#xff0c;需要不断学习和提升自身技能。…

MySQL与Redis数据一致性保障方案详解

前言 在现代分布式系统中&#xff0c;MySQL和Redis的结合使用非常普遍。MySQL作为关系型数据库负责持久化存储&#xff0c;而Redis则作为高性能缓存层提升系统的响应速度。然而&#xff0c;在这种架构下&#xff0c;如何保证MySQL与Redis之间的数据一致性是一个重要的挑战。本…

MySQL响应慢是否由堵塞或死锁引起?

目录标题 **1. 检查当前运行的查询和进程****2. 查看死锁日志****方法一&#xff1a;通过错误日志****方法二&#xff1a;通过InnoDB状态** **3. 检查锁信息****查看表锁****查看行锁&#xff08;InnoDB&#xff09;** **4. 分析慢查询****开启慢查询日志****分析慢查询** **5.…

【计算机网络】记录一次校园网无法上网的解决方法

问题现象 环境&#xff1a;实训室教室内时间&#xff1a;近期突然出现 &#xff08;推测是学校在施工&#xff0c;部分设备可能出现问题&#xff09;症状&#xff1a; 连接校园网 SWXY-WIFI 后&#xff1a; 连接速度极慢偶发无 IP 分配&#xff08;DHCP 失败&#xff09;即使分…

JavaScript函数式编程思想

1. 相关面试题 1.1. 什么是纯函数&#xff1f; 纯函数是一种函数&#xff0c;其返回值仅由其输入参数决定&#xff0c;不产生任何可观察的副作用&#xff0c;如修改全局对象或外部状态。 纯函数具有以下特性&#xff1a; 1. 确定性&#xff1a;相同的输入永远得到相同的输…

Elasticsearch安全与权限控制指南

在Elasticsearch维护中&#xff0c;安全管理是保障数据合规性和集群稳定性的关键。本文将详细介绍用户与角色管理、索引/字段级权限控制、HTTPS加密通信、审计日志与合规性检查等核心安全实践&#xff0c;希望可以帮助你构建更安全的Elasticsearch环境。 1 用户与角色管理 1.1…

『VUE』快速入门配置环境使用tailwind css 记忆tailwind css常见规则 (详细图文注释)

目录 效果预览快速入门环境配置配置 tailwind.config.js 设置文件添加 Tailwind 的基础样式引入样式到项目检查构建工具配置测试 Tailwind CSS 效果 使用插件tailwind.config.js的最终内容app.vue演示 为什么不需要记忆 Tailwind 的类名&#xff1f;1. 类名直观2. 文档全面3. 工…

StdioIterator

参考这种用法&#xff1a; int a[3]{1,2,3}; copy(a,a3,ostream_iterator<int>(cout," ")); 以及 ostream_iterator 类 | Microsoft Learn 中的函数签名&#xff0c;可以编写出 StdioIterator&#xff0c;同样支持 copy 函数的调用。 #include <stdio.h&…

制作service列表并打印出来

制作service列表并打印出来 在Linux中&#xff0c;服务&#xff08;Service&#xff09;是指常驻在内存中的进程&#xff0c;这些进程通常监听某个端口&#xff0c;等待其他程序的请求。服务也被称为守护进程&#xff08;Daemon&#xff09;&#xff0c;它们提供了系统所需的各…

CKS认证 | Day3 K8s容器运行环境安全加固

一、最小特权原则&#xff08;POLP&#xff09; 1&#xff09;最小特权原则 (Principle of least privilege&#xff0c;POLP) &#xff1a; 是一种信息安全概念&#xff0c;即为用户提供执行其工作职责所需的最 小权限等级或许可。 最小特权原则被广泛认为是网络安全的最佳实…

Linux wifi 驱动移植适配流程详解

基础内容概要 将tplink wn725n 无线网卡驱动移植到ubuntu将tplink wn725n 无线网卡驱动移植到Linux开发板&#xff08;交叉编译&#xff09;将tplink wn725n 无线网卡驱动移植到Linux开发板&#xff0c;在开发板中编译 为什么还要包涵交叉编译&#xff1f; 目标设备是ARM架构…

Day14 动态规划(3)

一.746. 使用最小花费爬楼梯 FS记忆化搜索优化: const int N 1010;class Solution { public:int mem[N];int dfs(vector<int>& cost, int x){if(mem[x]) return mem[x];int sum 0;if(x 0 || x 1) return 0;else{sum min(dfs(cost, x - 1) cost[x - 1], dfs(c…