求二叉树第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;
}

目录
相关文章
|
12月前
|
机器学习/深度学习 人工智能 并行计算
"震撼!CLIP模型:OpenAI的跨模态奇迹,让图像与文字共舞,解锁AI理解新纪元!"
【10月更文挑战第14天】CLIP是由OpenAI在2021年推出的一种图像和文本联合表示学习模型,通过对比学习方法预训练,能有效理解图像与文本的关系。该模型由图像编码器和文本编码器组成,分别处理图像和文本数据,通过共享向量空间实现信息融合。CLIP利用大规模图像-文本对数据集进行训练,能够实现zero-shot图像分类、文本-图像检索等多种任务,展现出强大的跨模态理解能力。
1152 2
扩展uview表单组件标题文本支持两端对齐
扩展uview表单组件标题文本支持两端对齐
354 2
|
IDE 开发工具 数据安全/隐私保护
如何对PDF的加密和破解?
PDF文档的加密与暴力破解加密文档
345 0
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
563 0
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
iOS开发
iOS16.1系统由于一个系统弹窗无法取消,导致屏幕卡死无法关机问题及解决方案
iOS16.1系统由于一个系统弹窗无法取消,导致屏幕卡死无法关机问题及解决方案
1604 0
|
网络协议 图形学
Socket TCP协议解决粘包、半包问题的三种解决方案
Socket TCP协议解决粘包、半包问题的三种解决方案
489 2
Socket TCP协议解决粘包、半包问题的三种解决方案
|
并行计算 IDE Shell
python自带的idle以及pycharm使用
python自带的idle以及pycharm使用
494 0
python自带的idle以及pycharm使用
|
搜索推荐 Java 自然语言处理
天猫精灵DIY--技能应用
简述天猫精灵技能开发的基础操作
天猫精灵DIY--技能应用
西门子S7-200 SMART项目的编译、如何下载、运行调试、上传项目
上篇文章中我们学习了西门子S7-200 SMART如何切换编程编辑器、输入LAD程序以及如何编辑程序,本篇我们来介绍编程软件STEP7-Micro/WIN SMART中项目的编译、下载、运行调试和上传。
西门子S7-200 SMART项目的编译、如何下载、运行调试、上传项目
|
数据库 对象存储 CDN
阿里云网站建设云企业官网收费价格表(首年和续费价格)
阿里云建站云企业官网首年价格包括设计费和SaaS系统年费,第二续费只收取SaaS系统年费。标准版首年4980元、高级版首年6980元、尊贵版9980元首年,第二年续费标准版980元/年、高级版1980元/年、尊贵版2980元/年
2267 0
阿里云网站建设云企业官网收费价格表(首年和续费价格)