最近学了二叉树,这个数据结构和它的名字一样,真是二叉。如果单纯的让我想这样的算法,以笔者的脑子想一辈子都想不出来。二叉树刚学完,老师又讲了图。
俗话说,不能在一棵树上吊死,那我选择在二叉树上吊死。关键是图还在下面扯着你,二叉树这个数据结构不会真的是憋死人。
下面,我将我各种查阅书籍与上网翻找得出的结果告诉大家,让大家能够清楚地了解二叉树的基本操作。
#include <iostream>
using namespace std;
#define MAXSIZE 100
class BTNode{
public:
char data;
BTNode *leftChild;
BTNode *rightChild;
BTNode():leftChild(NULL),rightChild(NULL){}
};
class binaryTree{
private:
BTNode *root;
public:
binaryTree();
~binaryTree();
void deleteTree (BTNode *rt);
BTNode *create_Tree();
BTNode *getRoot();
void PreOrder(BTNode *root);
void InOrder(BTNode *root);
void PostOrder(BTNode *root);
void LevelOrder(BTNode *root);
};
binaryTree::binaryTree()
{
root = create_Tree();
}
binaryTree::~binaryTree()
{
deleteTree(root);
}
BTNode *binaryTree::create_Tree()
{
BTNode *root;
char ch;
cin>>ch;
if(ch == '#')
root = NULL;
else
{
root = new BTNode;
root->data = ch;
root->leftChild = create_Tree();
root->rightChild = create_Tree();
}
return root;
}
void binaryTree::deleteTree (BTNode *rt)
{
if (rt!=NULL)
{
deleteTree(rt->leftChild);
deleteTree(rt->rightChild);
delete rt;
}
}
BTNode *binaryTree::getRoot()
{
return root;
}
void binaryTree::PreOrder(BTNode *root) //先序周游非递归算法(用栈实现)
{
BTNode *st[MAXSIZE],*p = NULL;
int top = -1;
if(root != NULL)
{
top++;
st[top] = root; //根节点入栈
while(top>-1) //判断当栈非空时循环
{
p = st[top]; //栈顶内容赋给p(即将输入的内容存放在p中)
top--;
cout<<p->data<<" "; //输出栈顶内容
if(p->rightChild != NULL) //右孩子入栈
{
top++;
st[top] = p->rightChild;
}
if(p->leftChild != NULL) //左孩子入栈
{
top++;
st[top] = p-&