数据结构实验(C++实现):堆和搜索树

本次实验要求使用C++创建最大堆并输出层次序列,随后进行堆排序输出排序结果。此外,还需基于输入数据构建二叉搜索树,并输出其前序和中序遍历序列。实验提示鼓励代码复用和借鉴,实验过程顺利完成,所有测试用例均通过。
摘要由CSDN通过智能技术生成

实验要求:

  1. 输入一系列不为零的正整数(最多不超过20个),遇到0代表输入结束(不包含0)。
  2. 根据上面输入的数据序列,用初始化方法创建最大堆(不要用节点依次插入的办法创建最大堆),然后输出最大堆的层次序列。
  3. 输出用堆排序后的排序结果。
  4. 根据上面输入的数据,创建二叉搜索树(关键字不允许重复,如遇重复,则不重复插入该关键字),输出二叉搜索树的前序序列、中序序列(分行输出)。

(输出格式如下图所示
在这里插入图片描述


小提示:
这次试验并不难,而且用到了上一次实验的部分代码,可以进行代码复用(复制),嘿嘿,比如用全局变量commaFlag控制输出格式,还有搜索树的部分函数可以从上一个实验中借鉴(照抄)。


//my solution
#include <iostream>
#include <algorithm>
using namespace std;

int commaFlag;

//Max heap part
template<class T>
class maxHeap
{
   
public:
	maxHeap() {
    heap = NULL; heapSize = 0; }

	void deactivate() {
    heap = NULL; }//将heap赋空,防止错误释放
	void initialize(T*, int);
	T pop();
	void levelOrder() const;
protected:
	T* heap;
	int heapSize;
};

template<class T>
void maxHeap<T>::initialize(T* initHeap, int initSize)
{
   
	//initialize
	delete[]heap;
	heap = initHeap;
	heapSize = initSize;
	
	//standardize
	for (int r = heapSize / 2; r >= 1; r--)
	{
   
		T rElement = heap[r];
		int rChild = 2 * r;
		while (rChild <= heapSize)
		{
   
			//rChild is the max one of r'childs
			if (rChild < heapSize && heap[rChild] < heap[rChild + 1]) rChild++;
			if (rElement < heap[rChild])
			{
   
				heap[rChild / 2] = heap[rChild];
				rChild *= 2;
			}
			else break;
		}
		heap[rChild / 2] = rElement;
	}
}

template<class T>
T maxHeap<T>::pop()
{
   
	T top = heap[1];
	T lastElement = heap[heapSize--];
	int current = 1, child 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值