【每日一题-17】线索化二叉树与单例模式

2023-05-16

将二叉搜索树转换成一个排序的双向链表。提示:要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。--中序线索化的变型。 

struct TreeNode
{
	int val;
	struct TreeNode* left;
	struct TreeNode* right;
};
TreeNode* TreeToList(TreeNode* root)
{
	if (root == NULL)
		return;
	TreeNode* pre = NULL;
	TreeNode* cur = root;
	_TreeToList(root, pre);
	while (cur->left != NULL)
		cur = cur->left;
	return cur;
}
TreeNode* _TreeToList(TreeNode* root, TreeNode* &pre)
{
	if (root == NULL)
		return;
	_TreeToList(root->left, pre);
	root->left = pre;
	if (pre)
		pre->right = root;
	pre = root;
	_TreeToList(root->right, pre);
}
单例模式

单例模式分类&比较:

懒汉模式:只有在必须要创建对象的时候才去创建对象

饿汉模式:程序一开始就创建对象

懒汉模式:实现相对复杂,安全性比较高

饿汉模式:实现简单,但是在某些特殊的场景下不能确保正确性

懒汉模式代码实现:

class singleton
{
protected:
	singleton()
	{
		pthread_mutex_init(&mutex);
	}
private:
	static singleton* p;
public:
	static pthread_mutex_t mutex;
	static singleton* initance();
};

pthread_mutex_t singleton::mutex;
singleton* singleton::p = NULL;
singleton* singleton::initance()
{
	if (p == NULL)
	{
		pthread_mutex_lock(&mutex);
		if (p == NULL)
			p = new singleton();
		pthread_mutex_unlock(&mutex);
	}
	return p;
}
饿汉模式代码实现:
class singleton
{
protected:
	singleton()
	{}
private:
	static singleton* p;
public:
	static singleton* initance();
};
singleton* singleton::p = new singleton;

singleton* singleton::initance()
{
	return p;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【每日一题-17】线索化二叉树与单例模式 的相关文章

  • linux下的crond&&crontab

    基本概念 1 crond和crontab是不可分割的 xff0c crontab是一个命令 xff0c 常用于Unix Linux系统之中 xff0c 用于设置周期性被执行的指令 2 crontab命令常用于从标准输入设备中读取指令 xff
  • 终端与作业控制

    strong span style font family none font size 24px 进程组 span strong span style font family none font size 18px 1 简单来说进程组就是
  • mac手册汉化 2019

    1 安装依赖 brew install automake brew install opencc 2 编译 wget https github com man pages zh manpages zh archive v1 6 3 3 ta
  • 守护进程&创建

    守护进程 守护进程也称为精灵进程 xff0c 是一种运行在后台的特殊进程 和其他后台进程所不同的是 xff0c 它始终独立其他会话 xff0c 自成会话组 xff0c 不受系统登录和注销的影响 xff0c 一般都是7 24小时在后台运行的
  • 智能指针剖析&模拟

    要学习智能指针之前需要先了解一下什么叫RAII xff1f 所谓RAII就是运行时初始化 xff0c 具体的实现就是定义一个类来封装运行资源的分配和释放工作 xff0c 在构造函数中进行资源的分配 xff0c 在析构函数中进行资源的回收工作
  • 代理服务器与NAT技术

    1 1 简介 1 1 1 名词解释 公有IP地址 xff1a 也叫全局地址 xff0c 是指合法的IP地址 xff0c 它是由NIC xff08 网络信息中心 xff09 或者ISP 网络服务提供商 分配的地址 xff0c 对外代表一个或多
  • 【网络】网络基础知识总结

    谈到网络 xff0c 首先就需要知道计算机网络中的两个参考模型 xff0c 即OSI参考模型 与TCP IP参考模型 OSI参考模型 OSI xff08 Open System Interconnect xff09 xff0c 即开放式系统
  • 【程序员面试宝典】数组相关面试题

    1 像素翻转 有一副由NxN矩阵表示的图像 xff0c 这里每个像素用一个int表示 xff0c 请编写一个算法 xff0c 在不占用额外内存空间的情况下 即不使用缓存矩阵 xff0c 将图像顺时针旋转90度 给定一个NxN的矩阵 xff0
  • 浅析TCP协议中的各种定时器

    TCP在建立连接之后可能会启动四个定时器 重传计时器 xff1a Retransmission Timer 坚持计时器 xff1a Persistent Timer 保活计时器 xff1a Keeplive Timer 时间等待计时器 xf
  • 【程序员面试宝典】字符串相关面试题

    1 确定字符互异 请实现一个算法 xff0c 确定一个字符串的所有字符是否全都不同给定一个string iniString xff0c 请返回一个bool值 True代表所有字符全都不同 xff0c False代表存在相同的字符 保证字符串
  • 【程序员面试宝典】链表相关面试题

    1 链表中的第k个节点 题目描述 xff1a 输入一个链表 xff0c 输出该链表中倒数第k个结点 struct ListNode span class hljs built in int span val struct ListNode
  • 【网络】网络端口号分类

    在开始之前有必要先说一下为什么要网络要对对端口号进行细分 xff0c 而像常见的端口号之间又是什么东西 xff0c 有什么作用 xff0c 为什么要学习端口号相关的知识 xff0c 带着这些疑问 xff0c 下面开始今天知识的学习 在我学习
  • TCP协议中的URG和PSH位

    相关背景知识 http blog csdn net double happiness article details 74025156 在探讨TCP协议中的URG和PSH控制位时 xff0c 我们先来简单的复习一下TCP协议 URG xff
  • 问答QA(一)综述

    声明 xff1a 本文是综合网上问答系统介绍 xff0c 做的总结 xff0c 如有侵权 xff0c 请联系处理 xff0c 谢谢 一 问答系统架构 1 1 问题分析模块 负责对用户的提问进行处理 xff1b 生成查询关键词 xff08 提
  • 【程序员面试宝典】栈和队列相关面试题

    1 集合栈 题目描述 xff1a 请实现一种数据结构SetOfStacks xff0c 由多个栈组成 xff0c 其中每个栈的大小为size xff0c 当前一个栈填满时 xff0c 新建一个栈 该数据结构应支持与普通栈相同的push和po
  • 【程序员面试宝典】栈的应用

    1 下一个较大元素 现在我们有一个int数组 xff0c 请你找出数组中每个元素的下一个比它大的元素 给定一个int数组A及数组的大小n xff0c 请返回一个int数组 xff0c 代表每个元素比他大的下一个元素 若不存在则为 1 保证数
  • time_wait与面试的暧昧

    背景知识 TCP三次握手与四次挥手 http blog csdn net double happiness article details 70160738 time wait是什么 xff1f 通过上面三次握手和四次挥手的学习 xff0c
  • 【通信方式五】socket编程之TCP通信

    1 网络字节序 网络字节序就是熟知的关于大小端的问题 xff0c 关于前面的大小端的判断方法 xff0c 以及代码实现再此就不在赘述 xff0c 下面只谈网络中的字节序问题 xff08 如何判定当前机器的大小端 xff1a http blo
  • 【通信方式六】socket编程之UDP通信

    相关博客 通信方式五 socket编程之TCP http blog csdn net double happiness article details 74938008 由于TCP协议是可靠的面向连接的协议 xff0c 因此在服务器端需要执
  • shell下的第一个编程(不一样的1到100累加)

    相信对于一个程序 猿 来说 xff0c 除了我们入门的 hello world 之外 xff0c 最简单的代码就是只有从1累加到100这样简单的程序吧 xff0c 没错这样的程序在现在来看或许根本不如我们的法眼 xff0c 那么问题来了 x

随机推荐