数据结构 - 二叉树的广度优先遍历算法(C++)

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

#include <iostream>#define _OK 1#define _ERROR 0using namespace std;// Define node element type in binary tree.typedef char Element;// Binary tree.typedef struct BTNode{ Element data; BTNode *lChild,*rChild; // Define left,right subtree.} BTNode, *BTree;// Define node element type in queue. (The node element type in queue is the pointer to binary tree node)typedef BTNode *QElementType;typedef int status;// --------------------------------------------------------------------// We need use queue to perform level traverse. So, define queue first.typedef struct QNode{ QElementType data; QNode *next;} QNode, *QueuePtr;// Definition of queue.typedef struct{ QueuePtr front; QueuePtr rear;} LinkQueue;status InitQueue(LinkQueue &Q){ Q.front = NULL; Q.rear = NULLreturn _OK;}bool IsEmpty(LinkQueue Q)return Q.front == NULL;}status EnQueue(LinkQueue &Q, QElementType e)// Construct queue node. QNode *ptrNode = (QNode*) malloc(sizeof(QNode)); if(!ptrNode) {  return _ERROR; } ptrNode->data=e; ptrNode->next=NULLif(IsEmpty(Q)) {  Q.front=Q.rear=ptrNode;  return _OK; } Q.rear->next=ptrNode; Q.rear = ptrNode; return _OK;}status DeQueue(LinkQueue &Q, QElementType &e)if(IsEmpty(Q)) {  return _ERROR; } QNode *tempPtr = Q.front; e = tempPtr->data; Q.front = tempPtr->next; free(tempPtr); return _OK;}// ------------------------------------------int CreateBTree(BTree &T)char ch; cout << "Please input a character:" << endlcin >> ch; if(ch=='#') {  T = NULL; } else {  // Allocate memory for new node.  if(!(T = (BTNode*)malloc(sizeof(BTNode))))  {   return 0; // Allocation fails.  }  T->data = ch;  // Create left subtree.  CreateBTree(T->lChild);  // Create right subtree.  CreateBTree(T->rChild); } return 1;}void VisitBTNode(BTNode *BT)cout << BT->data << endl;}void VisitQNode(QNode *Q){ VisitBTNode(Q->data);}void LevelTraverse(BTree T){ QElementType e; LinkQueue Q; InitQueue(Q); EnQueue(Q,T); while (!IsEmpty(Q)) {  VisitQNode(Q.front);  if(Q.front->data->lChild!=NULL)  {   EnQueue(Q,Q.front->data->lChild);  }  if(Q.front->data->rChild!=NULL)  {   EnQueue(Q,Q.front->data->rChild);  }  DeQueue(Q,e); }}// ------------------------------------------void main(){ BTree T; CreateBTree(T); LevelTraverse(T);}// Output:/*Please input a character:6Please input a character:gPlease input a character:#Please input a character:7Please input a character:fPlease input a character:gPlease input a character:8Please input a character:9Please input a character:#Please input a character:$Please input a character:#Please input a character:#Please input a character:#Please input a character:#Please input a character:cPlease input a character:#Please input a character:#Please input a character:#Please input a character:#6g7fgc89$*/
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值