求二叉树第m层上的第K个结点的值

简介:
/*
2.给定以下二叉树:

struct node_t

{

node_t *left, *right;

int value;

};
要求编写函数 node_t* foo(node_t *node, unsigned int m, unsigned int k);

输出以 node 为根的二叉树第 m 层的第 k 个节点值.

(level, k 均从 0 开始计数)

注意:

.此树不是完全二叉树;

.所谓的第K个节点,是本层中从左到右的第K个节点 

第三题 系统设计题
*/
#include <iostream>
using namespace std;

const int MAX_LENGTH = 100;

struct node_t
{
	node_t *left;
	node_t *right;
	int value;
};

node_t *queue[100];
int level = 0; // 记录第几层
int count = 0; // 记录第level层的第几个结点
int top = -1;
int rear = -1;

bool IsQueueEmpty()
{
	return top == rear;
}

void EnQueue(node_t *node)
{
	queue[++rear] = node;
}

node_t* DeQueue()
{
    return queue[++top];
}

void CreateBiTree(node_t **root)
{
	char ch;

	cin >> ch;
	
	if (ch == '*')
	{
		*root = NULL;
		return;
	}
	else
	{
		*root = new node_t;
		(*root)->value = ch;
		CreateBiTree(&(*root)->left);
		CreateBiTree(&(*root)->right);
	}
}

node_t* foo(node_t *node, unsigned int m, unsigned int k)
{
	node_t *p = node;
    int last = -1;
    
	if (p != NULL)
	{
		EnQueue(p); // 入队
		while (!IsQueueEmpty())
		{
			last = rear;
			while (top < last)
			{
				node_t *q = DeQueue();
				count++; // 当前层的第X个结点

				if (level == m && count == k)
				{
					cout << q->value << endl;
					return q;
				}

				if (q->left != NULL)
				{
					EnQueue(q->left);
				}

				if (q->right != NULL)
				{
					EnQueue(q->right);
				}
			}

			level++;
            count = 0;
		}
	}

	cout << "找不到符合的结点" << endl;

	return NULL;
}

int main()
{
	node_t *root;
	CreateBiTree(&root);
	cout << "树建立完毕" << endl;

	foo(root, 1, 1);

	return 0;
}

目录
相关文章
|
机器学习/深度学习 人工智能 并行计算
"震撼!CLIP模型:OpenAI的跨模态奇迹,让图像与文字共舞,解锁AI理解新纪元!"
【10月更文挑战第14天】CLIP是由OpenAI在2021年推出的一种图像和文本联合表示学习模型,通过对比学习方法预训练,能有效理解图像与文本的关系。该模型由图像编码器和文本编码器组成,分别处理图像和文本数据,通过共享向量空间实现信息融合。CLIP利用大规模图像-文本对数据集进行训练,能够实现zero-shot图像分类、文本-图像检索等多种任务,展现出强大的跨模态理解能力。
1310 2
扩展uview表单组件标题文本支持两端对齐
扩展uview表单组件标题文本支持两端对齐
420 2
|
9月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
352 23
|
9月前
|
机器学习/深度学习 人工智能 DataWorks
《AI牵手DataWorks,实时数据分析“一路狂飙”》
在大数据时代,数据是企业的生命线,实时数据分析能力至关重要。阿里巴巴的DataWorks作为强大的数据中台工具,结合人工智能(AI)技术,彻底改写了实时数据分析格局。传统方法面临数据量增长、复杂结构及缺乏自适应能力等挑战,而AI通过机器学习和深度学习算法,实现了智能预警、个性化推荐和实时风险评估等应用场景,显著提升了数据分析的速度和精度。成功案例显示,某互联网公司引入AI赋能的DataWorks后,用户活跃度提升30%,购买转化率提高20%。未来,AI与新兴技术的融合将进一步推动实时数据分析的发展。
371 6
|
IDE 开发工具 数据安全/隐私保护
如何对PDF的加密和破解?
PDF文档的加密与暴力破解加密文档
410 0
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
659 0
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
12月前
|
存储 分布式计算 安全
阿里云服务器经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例介绍与选择参考
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出合适的选择。
|
存储 缓存 开发工具
Xcode 清理大法
Xcode 清理大法
1480 0
|
数据采集 人工智能 自然语言处理
重磅!IDC、钉钉联合发布 2024 AIGC 应用层十大趋势
重磅!IDC、钉钉联合发布 2024 AIGC 应用层十大趋势
485 1
|
移动开发 HTML5 容器
HTML5 容器入门解析:支付宝 Hybrid 方案原理与实战
mPaaS 容器是支付宝原生 Hybrid 方案,经历了严苛的业务考验,可以和支付宝使用同一套框架层代码,让你拥有解决系统级 WebView Crash 的能力,并具备良好的、弹性的扩展能力,结合具体业务需求定制 JSAPI。
6908 1