#include <iostream>
using namespace std;
struct Binode
{
public:
int data;
Binode *lchild;
Binode *rchild;
};
class Bitree
{
public:
Bitree() {root=creat();}
//~Bitree(){release(root);}
void Preorder(){Preorder(root);}
void Inorder(){Inorder(root);}
void Postorder(){Postorder(root);}
void Levelorder();
private:
Binode *creat();
void Preorder(Binode *bt);
void Inorder(Binode *bt);
void Postorder(Binode *bt);
void release(Binode *bt);
Binode *root;
};
Binode *Bitree::creat()
{
Binode *bt;
char ch;
cin >> ch;
if (ch == '#')
{
bt = nullptr;
}
else
{
bt = new Binode;
bt->data = ch;
bt->lchild = creat();
bt->rchild = creat();
}
return bt;
}
void Bitree::Preorder(Binode *bt)
{
if (bt == nullptr)
{
return;
}
else
{
cout << bt->data-'0';
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
void Bitree::Inorder(Binode *bt)
{
if (bt == nullptr)
{
return;
}
else
{
Inorder(bt->lchild);
cout << bt->data-'0';
Inorder(bt->rchild);
}
}
void Bitree::Postorder(Binode *bt)
{
if (bt == nullptr)
{
return;
}
else
{
Postorder(bt->lchild);
Postorder(bt->rchild);
cout << bt->data-'0';
}
}
void Bitree::Levelorder()
{
Binode *Q[100];
Binode *q;
q=new Binode;
int front=-1;
int rear=-1;
if(root==nullptr)
{
return;
}
Q[++rear]=root;
while (front!=rear)
{
q=Q[++front];
cout<<q->data;
if(q->lchild!=nullptr) Q[++rear]=q->lchild;
if(q->rchild!=nullptr) Q[++rear]=q->rchild;
}
}
void Bitree::release(Binode *bt)
{
if(bt!=nullptr)
release(bt->lchild);
release(bt->rchild);
delete bt;
}
int main()
{
char ch;
while(1)
{
Bitree b;
cin>>ch;
b.Preorder();
cout<<endl;
b.Inorder();
cout<<endl;
b.Postorder();
cout<<endl;
b.Levelorder();
cout<<endl;
if(ch=='Y') continue;
else if(ch=='N') break;
}
}
数据结构:二叉树的建立(c++实现)
最新推荐文章于 2022-11-09 16:30:21 发布