#include<iostream>
#include<stack>
#include<queue>
using namespace std;
//节点类
class Node {
friend class Tree; //将类Tree作为类Node的友元类,则类Tree能访问Node类的所有成员。
private:
int key; //关键字
int status; //节点的状态属性,默认为0代表未建立左右子树,1代表建立了左子树,2代表建立了左右子树。
Node* lp; //左指针
Node* rp; //右指针
//定义有参构造函数并初始化成员变量,参数为key值。
Node(int k):key(k),status(0),lp(nullptr),rp(nullptr){}
};
//二叉树类
class Tree {
public:
Tree():root(nullptr), lock(true) {} //定义无参构造函数并初始化成员变量
Node* create(const string&); //非递归创建二叉树
void preOrder(Node*); //非递归前序遍历
void inOrder(Node*); //非递归中序遍历
void postOrder(Node*); //非递归后序遍历
void leverOrder(Node*); //非递归层次遍历
~Tree() {}
private:
stack<Node*> s; //用于先、中、后序遍历
queue<Node*> q; //用于层次遍历
bool lock; //用于visit函数输出遍历结果显示遍历名称的一个锁变量
Node* root; //根节点
typedef void(Tree::* Function_pointer)(Node*); //声明一个指针函数,用于遍历,返回值为void,参数为Node*,指针函数名为Function_pointer
void visit(Node* , Function_pointer); //声明访问函数,第二个参数为指针函数
};
//创建二叉树
Node* Tree::create(const string& str) {
auto it = str.begin(); //返回指向字符串第一个字符的迭代器
//如果字符串为空或
C++非递归创建二叉树及非递归遍历二叉树
于 2023-04-01 14:22:01 首次发布