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

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

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

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

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

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

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

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

实现代码如下:

cpp 复制代码
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作为非递归对象,需要他一直保持一个值,所以一定使用传引用传参。

相关推荐
likexuec1 小时前
数据结构(2)
数据结构
Peter-OK2 小时前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
D e re k ZH3 小时前
C++ 标准库算法全景指南
数据结构·c++·算法
冻柠檬飞冰走茶4 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
成都蜀味缘餐饮技术培训学校4 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
希和20275 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
蒸蒸yyyyzwd7 小时前
秋招学习笔记 day109
笔记·八股
只愿云淡风清9 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
希和202720 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
一个人旅程~1 天前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博