![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
二叉树层次遍历 c++
#include<iostream>usingnamespacestd;structTnode{intdata;Tnode*lchild;Tnode*rchild;int...
#include<iostream>
using namespace std;
struct Tnode
{
int data;
Tnode *lchild;
Tnode *rchild;
int a;
}T;
void creat(Tnode *&p)
{
int m,n;
p=new Tnode;
cout<<"请输入一个结点"<<endl;
cin>>p->data;
p->lchild=NULL;
p->rchild=NULL;
cout<<"是否输入左子树 1是 0否";
cin>>m;
if(m==1)
creat(p->lchild);
cout<<"是否输入右子树 1是 0否";
cin>>n;
if(n==1)
creat(p->rchild);
}
void preorder(Tnode *&p) //先序遍历
{
if(p)
{
cout<<p->data<<" ";
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(Tnode *&p) //中序遍历
{
if(p)
{
inorder(p->lchild);
cout<<p->data<<" ";
inorder(p->rchild);
}
}
void postorder(Tnode *&p) //后序遍历
{
if(p)
{
postorder(p->lchild);
postorder(p->rchild);
cout<<p->data<<" ";
}
}
int b=0;
void leaf(Tnode *&p)
{
if(p)
{
leaf(p->lchild);
if(p->lchild==NULL&&p->rchild==NULL)
b++;
leaf(p->rchild);
}
}
int Depth (Tnode *&p )
{
int depthval,depthLeft,depthRight;
if ( p==NULL ) depthval = 0;
else
{
depthLeft = Depth( p->lchild );
depthRight= Depth( p->rchild );
depthval = 1+(depthLeft > depthRight ? depthLeft : depthRight);
}
return depthval;
}
void main()
{
Tnode *a;
creat(a);
preorder(a);
cout<<endl;
inorder(a);
cout<<endl;
postorder(a);
cout<<endl;
leaf(a);
cout<<"叶子个数为:"<<b<<endl;
Depth(a);
int depth=Depth(a);
cout<<"二叉树的深度为:"<<depth;
cout<<endl;
}
这是我二叉树的基本操作,现在想加入层次遍历的函数,
需要用队列,可以顺序队列,也可以链式队列,
小女子拜托各位高手帮我完成这段代码~~
谢谢啦~~ 展开
using namespace std;
struct Tnode
{
int data;
Tnode *lchild;
Tnode *rchild;
int a;
}T;
void creat(Tnode *&p)
{
int m,n;
p=new Tnode;
cout<<"请输入一个结点"<<endl;
cin>>p->data;
p->lchild=NULL;
p->rchild=NULL;
cout<<"是否输入左子树 1是 0否";
cin>>m;
if(m==1)
creat(p->lchild);
cout<<"是否输入右子树 1是 0否";
cin>>n;
if(n==1)
creat(p->rchild);
}
void preorder(Tnode *&p) //先序遍历
{
if(p)
{
cout<<p->data<<" ";
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(Tnode *&p) //中序遍历
{
if(p)
{
inorder(p->lchild);
cout<<p->data<<" ";
inorder(p->rchild);
}
}
void postorder(Tnode *&p) //后序遍历
{
if(p)
{
postorder(p->lchild);
postorder(p->rchild);
cout<<p->data<<" ";
}
}
int b=0;
void leaf(Tnode *&p)
{
if(p)
{
leaf(p->lchild);
if(p->lchild==NULL&&p->rchild==NULL)
b++;
leaf(p->rchild);
}
}
int Depth (Tnode *&p )
{
int depthval,depthLeft,depthRight;
if ( p==NULL ) depthval = 0;
else
{
depthLeft = Depth( p->lchild );
depthRight= Depth( p->rchild );
depthval = 1+(depthLeft > depthRight ? depthLeft : depthRight);
}
return depthval;
}
void main()
{
Tnode *a;
creat(a);
preorder(a);
cout<<endl;
inorder(a);
cout<<endl;
postorder(a);
cout<<endl;
leaf(a);
cout<<"叶子个数为:"<<b<<endl;
Depth(a);
int depth=Depth(a);
cout<<"二叉树的深度为:"<<depth;
cout<<endl;
}
这是我二叉树的基本操作,现在想加入层次遍历的函数,
需要用队列,可以顺序队列,也可以链式队列,
小女子拜托各位高手帮我完成这段代码~~
谢谢啦~~ 展开
展开全部
没给例子,不知道对不对
#include<list>
void levelorder(Tnode *&p)
{
list<Tnode *>q;
if(p)q.push_back(p);
while(!q.empty())
{
p=q.front();
q.pop_front();
cout<<p->data<<" ";
if(p->lchild)
q.push_back(p->lchild);
if(p->rchild)
q.push_back(p->rchild);
}
}
#include<list>
void levelorder(Tnode *&p)
{
list<Tnode *>q;
if(p)q.push_back(p);
while(!q.empty())
{
p=q.front();
q.pop_front();
cout<<p->data<<" ";
if(p->lchild)
q.push_back(p->lchild);
if(p->rchild)
q.push_back(p->rchild);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回学校看看书再来解决吧..不过那时候肯定被解决了,唉..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询