前序遍历👇
void PreOrder(BinaryTreeNode<T>* treeNode) {
if (treeNode != NULL) {
treeNode->VisitNode();
PreOrder(treeNode->getLeft());
PreOrder(treeNode->getRight());
}
}
中序遍历👇
void InOrder(BinaryTreeNode<T>* treeNode) {
if (treeNode != NULL) {
InOrder(treeNode->getLeft());
treeNode->VisitNode();
InOrder(treeNode->getRight());
}
}
后序遍历👇
void PostOrder(BinaryTreeNode<T>* treeNode) {
if (treeNode != NULL) {
PostOrder(treeNode->getLeft());
PostOrder(treeNode->getRight());
treeNode->VisitNode();
}
}
完整代码👇
#include<iostream>
using namespace std;
//结点类
template<class T>
class BinaryTreeNode {
//友元类声明
template<class T>
friend class BinaryTree;
private:
T data;
BinaryTreeNode<T>* leftchild;
BinaryTreeNode<T>* rightchild;
public:
//构造函数
BinaryTreeNode() {
leftchild = NULL;
rightchild = NULL;
}
BinaryTreeNode(const T& dataValue) {
data = dataValue;
leftchild = NULL;
rightchild = NULL;
}
BinaryTreeNode(const T& dataValue, BinaryTreeNode<T>* leftchildValue, BinaryTreeNode<T>* rightchildValue) {
data = dataValue;
leftchild = leftchildValue;
rightchild = rightchildValue;
}
//析构函数
~BinaryTreeNode() {
leftchild = NULL;
rightchild = NULL;
}
//访问结点
void VisitNode() {
cout << data << " ";
}
//取左结点
BinaryTreeNode<T>* getLeft() {
return leftchild;
}
//取右结点
BinaryTreeNode<T>* getRight() {
return rightchild;
}
};
//二叉树类
template<class T>
class BinaryTree {
private:
BinaryTreeNode<T>* root;
public:
//构造函数
BinaryTree() {
root = NULL;
cout << "Now start to construct the BinaryTree" << endl;
CreateNode(root);
}
//析构函数
~BinaryTree() {
root = NULL;
}
//前序构建二叉树
void CreateNode(BinaryTreeNode<T>* &treeNode) {
cout << "Please enter a value or '#' to stop:";
T dataValue;
cin >> dataValue;
treeNode = new BinaryTreeNode<T>(dataValue);
if (treeNode->data == '#') {
delete treeNode;
treeNode = NULL;
}
else {
CreateNode(treeNode->leftchild);
CreateNode(treeNode->rightchild);
}
}
//取根节点
BinaryTreeNode<T>* getRoot() {
return root;
}
//递归前序遍历
void PreOrder(BinaryTreeNode<T>* treeNode) {
if (treeNode != NULL) {
treeNode->VisitNode();
PreOrder(treeNode->getLeft());
PreOrder(treeNode->getRight());
}
}
//递归中序遍历
void InOrder(BinaryTreeNode<T>* treeNode) {
if (treeNode != NULL) {
InOrder(treeNode->getLeft());
treeNode->VisitNode();
InOrder(treeNode->getRight());
}
}
//递归后序遍历
void PostOrder(BinaryTreeNode<T>* treeNode) {
if (treeNode != NULL) {
PostOrder(treeNode->getLeft());
PostOrder(treeNode->getRight());
treeNode->VisitNode();
}
}
};
int main() {
//前序构建二叉树
BinaryTree<char> test;
//遍历二叉树
cout << endl << "前序遍历结果:";
test.PreOrder(test.getRoot());
cout << endl << "中序遍历结果:";
test.InOrder(test.getRoot());
cout << endl << "后序遍历结果:";
test.PostOrder(test.getRoot());
}