当前位置: 首页 > article >正文

<刷题笔记> 二叉搜索树与双向链表注意事项

二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com)

根据题意,我们需要将搜索二叉树转换成有序的形式。

重点一:BST的中序遍历一定是有序的

因此,此题无论如何都需要使用中序。

又因为要求原地算法,所以:

 重点二:中序遍历的第一个节点就是最左的节点,在走到最左节点之前,prev都应该指向nullptr

所以只有在遍历到节点之后,才需要让prev=cur,之前的向左递归的步骤都不需要也不能让prev跟上cur的值。

实现代码如下:

class Solution {
public:
    void Inorder(TreeNode* cur,TreeNode*& prev){/*cur是在递归的中序遍历,所以一定不传引用,而prev必须一直传引用*/
		if(cur==nullptr){
		   //prev = cur;
           return ;
		}
		//prev = cur;
		Inorder(cur->left,prev);

        //prev表示的是当前遍历节点的上一个有效位置
		cur->left = prev;
		if(prev) prev->right = cur;
		prev = cur ;

		Inorder(cur->right,prev);
	}
    TreeNode* Convert(TreeNode* pRootOfTree) {
		if(pRootOfTree==nullptr) return nullptr;
        TreeNode* cur = pRootOfTree;
		TreeNode* prev = nullptr;
		Inorder(cur,prev);

		TreeNode* head = pRootOfTree;
		while(head->left){
			head = head->left;
		}
		return head;
    }
};

 重点三:关于在递归中设计不递归的变量

cur作为中序遍历的对象,在递归过程中一直使用传值传参

而prev作为非递归对象,需要他一直保持一个值,所以一定使用传引用传参。


http://www.kler.cn/news/317355.html

相关文章:

  • OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(上)
  • 流域碳中和技术
  • 使用Docker一键部署Blossom笔记软件
  • 【C#生态园】一文详解:NHibernate、Entity Framework Core、Dapper 等 .NET ORM 框架优劣对比
  • M9410A VXT PXI 矢量收发信机,300/600/1200MHz带宽
  • 防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)
  • 11. DPO 微调示例:根据人类偏好优化LLM大语言模型
  • 【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介
  • 应用层-网络协议
  • Java面试篇基础部分- Java中的阻塞队列
  • 解决selenium爬虫被浏览器检测问题
  • 5. 条件 Conditionals
  • 56 mysql 用户权限相关的实现
  • Spring高手之路24——事务类型及传播行为实战指南
  • DHCP中继工作原理
  • 算法【Dijkstra算法及分层图最短路】
  • WPF实现关系图
  • Vue开发前端图片上传给java后端
  • MMD模型一键完美导入UE5-VRM4U插件方案(一)
  • 为什么三星、OPPO、红米都在用它?联发科12nm级射频芯片的深度剖析
  • Fyne ( go跨平台GUI )中文文档-入门(一)
  • Adobe预览今年晚些时候推出的AI视频工具
  • RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?
  • 深入理解Vue3中style的scoped
  • 简单计算器(python基础代码撰写)
  • Vue3:具名插槽
  • 微信小程序07-开发进阶
  • c++难点核心笔记(一)
  • 基于SpringBoot+Vue的在线问诊管理系统
  • 【觅图网-注册安全分析报告-无验证方式导致安全隐患】