数据结构实验(7)

数据结构实验(C++)

PS:仅数据结构实验记录

题目:假设二叉树采用链接存储方式存储,分别编写一个二叉树先序遍历的递归 算法和非递归算法。

//头文件代码
Tree.h
#pragma once
#include <iostream>
using namespace std;
template<typename DataType>
struct BiNode									//结点
{
	DataType data;
	BiNode* lchild, * rchild;
};
template<typename DataType>
class BiTree
{
public:
	BiTree(){root = Creat();}						//构造函数
	~BiTree() { Realse(root); }						//析构函数
	void PreOrder1() { PreOrder1(root); }			//递归前序遍历
	void PreOrder2();								//非递归前序遍历
private:
	BiNode<DataType>* Creat();						//构造函数调用
	void Realse(BiNode<DataType>* bt);					//析构函数调用
	void PreOrder1(BiNode<DataType>* bt);				//递归前序遍历调用
	BiNode<DataType>* root;							//指向根节点的头指针
};

//cpp部分代码
Tree.cpp
#include"Tree.h"
template<typename DataType>
BiNode<DataType>* BiTree<DataType>::Creat()			//构造函数调用
{
	BiNode<DataType>* bt;
	cout << "请输入数据:";
	char ch;
	cin >> ch;
	if (ch == '#')
		bt = nullptr;
	else
	{
		bt = new BiNode<DataType>;
		bt->data = ch;
		bt->lchild = Creat();
		bt->rchild = Creat();
	}
	return bt;
}
template<typename DataType>
void BiTree<DataType>::Realse(BiNode<DataType>* bt)        //析构函数调用
{
	if (bt == nullptr)
		return;
	else
	{
		Realse(bt->lchild);
		Realse(bt->rchild);
		delete bt;
	}
}
//递归遍历算法#
template<typename DataType>
void BiTree<DataType>::PreOrder1(BiNode<DataType>* bt)
{
	if (bt == nullptr)
		return;
	else
	{
		cout << bt->data << "\t";
		PreOrder1(bt->lchild);
		PreOrder1(bt->rchild);
	}
}
//非递归遍历算法#
template<typename DataType>
void BiTree<DataType>::PreOrder2()
{
	BiNode<DataType>* bt = root;
	BiNode<DataType>* S[100];
	int top = -1;
	while (bt != nullptr || top != -1)
	{
		while (bt != nullptr)
		{
			cout << bt->data << "\T";
			S[++top] = bt;
			bt = bt->lchild;
		}
		if (top != -1)
		{
			bt = S[top--];
			bt = bt->rchild;
		}
	}
}
int main()
{
	BiTree<char> T{};
	cout << "该树的递归前序遍历序列是;";
	T.PreOrder1();
	cout << "\n该树的非递归前序遍历序列是:";
	T.PreOrder2();
	return 0;
}

测试过程
1)测试图
在这里插入图片描述
2)截图
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值