本次实现的是二叉树的链式存储结构。插入方式采用的是二叉排序树的插入方式。实现了二叉树的先序&中序&后序&层次遍历
#include
#include
using namespace std;
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
bool Insert(BiTree &root, int data); // 根据二叉排序树插入
void Traversal(BiTNode *root, int type); // 0: 先序, 1: 中序, 2: 后序, 3: 层次
void PreorderTraversal(BiTNode *root);
void InorderTraversal(BiTNode *root);
void PostorderTraversal(BiTNode *root);
void LevelTraversal(BiTNode *root);
void visit(BiTNode* p);//访问结点
// Code
int main()
{
BiTree root = nullptr;
Insert(root, 6);
Insert(root, 4);
Insert(root, 5);
Insert(root, 8);
Insert(root, 7);
Insert(root, 9);
printf("二叉排序树");
printf("\n先序:");
Traversal(root,0);
printf("\n中序:");
Traversal(root,1);
printf("\n后序:");
Traversal(root,2);
printf("\n层次:");
Traversal(root,3);
system("pause");
}
// 根据二叉排序树插入
bool Insert(BiTree &p, int data)
{
if (p == nullptr)
{
p = (BiTNode *)malloc(sizeof(BiTNode));
p->data = data;
p->lchild = nullptr;
p->rchild = nullptr;
return true;
}
if (data < p->data)
{
Insert(p->lchild, data);
return true;
}
else if (data > p->data)
{
Insert(p->rchild, data);
return true;
}
else
{
return false;
}
}
// 0: 先序, 1: 中序, 2: 后序, 3: 层次
void Traversal(BiTNode *root, int type)
{
switch (type)
{
case 0:
PreorderTraversal(root);
break;
case 1:
InorderTraversal(root);
break;
case 2:
PostorderTraversal(root);
break;
case 3:
LevelTraversal(root);
break;
default:
break;
}
}
//先序
void PreorderTraversal(BiTNode *root){
if(root!=nullptr){
visit(root);
PreorderTraversal(root->lchild);
PreorderTraversal(root->rchild);
}
}
void InorderTraversal(BiTNode *root){
if(root!=nullptr){
InorderTraversal(root->lchild);
visit(root);
InorderTraversal(root->rchild);
}
}
void PostorderTraversal(BiTNode *root){
if(root!=nullptr){
PostorderTraversal(root->lchild);
PostorderTraversal(root->rchild);
visit(root);
}
}
void LevelTraversal(BiTNode *root){
queue<BiTNode*> Q;
Q.push(root);
while (!Q.empty())
{
if(Q.front()->lchild!=nullptr)
Q.push(Q.front()->lchild);
if(Q.front()->rchild!=nullptr)
Q.push(Q.front()->rchild);
visit(Q.front());
Q.pop();
}
}
//访问结点
void visit(BiTNode* p){
printf("%d ",p->data);
}
本文插入数据形成的二叉树如图
对应的遍历顺序
先序:6 4 5 8 7 9
中序:4 5 6 7 8 9
后序:5 4 7 9 8 6
层次:6 4 8 5 7 9