二叉树的层序遍历需要借助于队列
1.队列节点
class qnode
{
friend class CQueue;
friend class CBTree;
private:
node data;
qnode *next;
public:
qnode(void);
qnode(node);
~qnode(void);
};
构造队列:
class CQueue
{
friend class CBTree;
private:
qnode *front,*rear;
public:
void EnQueue(node); //入列
void DeQueue(); //出列
CQueue(void);
~CQueue(void);
};
void CQueue::EnQueue(node Data)
{
if(rear==NULL)
{
front=rear=new qnode(Data);
return;
}
rear->next=new qnode(Data);
rear=rear->next;
}
void CQueue::DeQueue()
{
if(front==NULL)
return;
qnode *q=front;
front=front->next;
cout<<q->data.data<<endl;
free(q);
}
二叉树的层序遍历
void CBTree::LevOrderTree(node *Node)
{
CQueue queue;
queue.EnQueue(*Node);
while(queue.front!=NULL)
{
if(queue.front->data.left)
queue.EnQueue(*(queue.front->data.left));
if(queue.front->data.right)
queue.EnQueue(*(queue.front->data.right));
queue.DeQueue();
}
}