#ifndef __BINARYTREE_H__
#define __BINARYTREE_H__
#include <iostream>
using namespace std;
template <class Elem>
class BinaryTree
{
public:
BinaryTree();
void prevCreateTree(); //按先序序列创建二叉树
void prevOrderTraverse(); //先序遍历二叉树
void inOrderTraverse(); //中序遍历二叉树
void postOrderTraverse(); //后序遍历二叉树
void setFlag(Elem f);
const Elem &getFlag() const;
private:
struct BiTreeNode
{
Elem elem;
struct BiTreeNode *lChild;
struct BiTreeNode *rChild;
BiTreeNode(Elem e)
:elem(e), lChild(NULL), rChild(NULL)
{
}
};
BiTreeNode *root;
Elem flag; //在创建二叉树时要有一个标记来表示创建到叶子结点了
void prevCreateTree(BiTreeNode *&root, const Elem &flag); //按先序序列创建二叉树
void prevOrderTraverse(BiTreeNode *root); //先序遍历二叉树
void inOrderTraverse(BiTreeNode *root); //中序遍历二叉树
void postOrderTraverse(BiTreeNode *root); //后序遍历二叉树
};
template <class Elem>
BinaryTree<Elem>::BinaryTree()
:root(NULL)
{
}
template <class Elem>
void BinaryTree<Elem>::prevCreateTree()
{
prevCreateTree(root, getFlag());
}
template <class Elem>
void BinaryTree<Elem>::prevOrderTraverse()
{
prevOrderTraverse(root);
}
template <class Elem>
void BinaryTree<Elem>::inOrderTraverse()
{
inOrderTraverse(root);
}
template <class Elem>
void BinaryTree<Elem>::postOrderTraverse()
{
postOrderTraverse(root);
}
template <class Elem>
void BinaryTree<Elem>::setFlag(Elem f)
{
flag = f;
}
template <class Elem>
const Elem &BinaryTree<Elem>::getFlag() const
{
return flag;
}
template <class Elem>
void BinaryTree<Elem>::prevCreateTree(BiTreeNode *&root, const Elem &flag)
{
Elem e;
if(cin >> e && e != flag)
{
BiTreeNode *node = new BiTreeNode(e);
root = node;
prevCreateTree(root->lChild, flag);
prevCreateTree(root->rChild, flag);
}
}
template <class Elem>
void BinaryTree<Elem>::prevOrderTraverse(BiTreeNode *root)
{
if(root != NULL)
{
cout << root->elem << endl;
prevOrderTraverse(root->lChild);
prevOrderTraverse(root->rChild);
}
}
template <class Elem>
void BinaryTree<Elem>::inOrderTraverse(BiTreeNode *root)
{
if(root != NULL)
{
inOrderTraverse(root->lChild);
cout << root->elem << endl;
inOrderTraverse(root->rChild);
}
}
template <class Elem>
void BinaryTree<Elem>::postOrderTraverse(BiTreeNode *root)
{
if(root != NULL)
{
postOrderTraverse(root->lChild);
postOrderTraverse(root->rChild);
cout << root->elem << endl;
}
}
#endif
二叉树的三种遍历(递归)
最新推荐文章于 2022-05-10 23:02:02 发布