#include "stdafx.h"
#include <iostream>
using namespace std;
struct Tnode
{
char data;
Tnode * lchild, *rchild;
};
class Etree
{
public:
Etree()
{
root = Creat(root);
}
~Etree()
{
Release(root);
}
void Preorder()
{
Preorder(root);
}
void Inorder()
{
Inorder(root);
}
void Postorder()
{
Postorder(root);
}
void find()
{
void findnode(Tnode * bt);
}
private:
Tnode * root;
Tnode * Creat(Tnode *bt);
void Release(Tnode *bt);
void Preorder(Tnode *bt);
void Inorder(Tnode * bt);
void Postorder(Tnode * bt);
void findnode(Tnode * bt);
};
Tnode * Etree::Creat(Tnode * bt)
{
char ch;
cout << "请输入创建一棵二叉树的结点数据:" << endl;
cin >> ch;
if (ch == '#') return NULL;
else
{
bt = new Tnode;
bt->data = ch;
bt->lchild = Creat(bt->lchild);
bt->rchild = Creat(bt->rchild);
}
return bt;
}
void Etree::Release(Tnode * bt)
{
if (bt != NULL)
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
void Etree::Preorder(Tnode * bt)
{
if (bt == NULL)
return;
else
{
cout << bt->data << " ";
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
void Etree::Inorder(Tnode * bt)
{
if (bt == NULL)
return;
else
{
Inorder(bt->lchild);
cout << bt->data << " ";
Inorder(bt->rchild);
}
}
void Etree::Postorder(Tnode * bt)
{
if (bt == NULL)
return;
else
{
Postorder(bt->lchild);
Postorder(bt->rchild);
cout << bt->data << " ";
}
}
void Etree::findnode(Tnode * bt)
{
char zhi;
cout << "请输出要查看的节点的值" << endl;
cin >> zhi;
if (zhi == '#')
return;
else
{
while (bt != NULL)
{
Preorder(bt->lchild);
Preorder(bt->rchild);
if (bt->data == zhi)
{
{
if (bt->lchild == NULL)
cout << "该节点无左节点。" << endl;
else
cout << "该节点的左节点的值为:" << (bt->lchild)->data << endl;
}
{
if (bt->rchild == NULL)
cout << "该节点无右节点。" << endl;
else
cout << "该节点的右节点的值为:" << (bt->rchild)->data << endl;
}
}
}
}
}
int main()
{
Etree T;
cout << "前序遍历:" << endl;
T.Preorder();
cout << endl;
cout << "中序遍历:" << endl;
T.Inorder();
cout << endl;
cout << "后序遍历:" << endl;
T.Postorder();
cout << endl;
T.find();
return 0;
}
实验5:二叉树的链式储存
最新推荐文章于 2019-07-16 23:25:20 发布