数据结构实验(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)截图