外贸公司网站搭建,上海森琦阳网络科技有限公司,wordpress调用文章字数,个人公众号怎么赚钱二叉树的层次遍历 层序遍历顾名思义就是一层一层的遍历的树中的所有结点。
typedef char EmpeType
在本篇文章中#xff0c;将char类型使用EmpeType#xff1b;
typedef char EmpeType;创建一个结构体
typedef struct BiTNode {EmpeType data; //数据域struct BiTNode* …二叉树的层次遍历 层序遍历顾名思义就是一层一层的遍历的树中的所有结点。
typedef char EmpeType
在本篇文章中将char类型使用EmpeType
typedef char EmpeType;创建一个结构体
typedef struct BiTNode {EmpeType data; //数据域struct BiTNode* lchild; //左孩子struct BiTNode* rchild; //右孩子
}BitNode;快速创建一个树
首先我们进行快速创建一个二叉树。 //快速创建一个树BiTNode* A (BiTNode*)malloc(sizeof(BiTNode));A-data A;A-lchild NULL;A-rchild NULL;BiTNode* B (BiTNode*)malloc(sizeof(BiTNode));B-data B;B-lchild NULL;B-rchild NULL;BiTNode* C (BiTNode*)malloc(sizeof(BiTNode));C-data C;C-lchild NULL;C-rchild NULL;BiTNode* D (BiTNode*)malloc(sizeof(BiTNode));D-data D;D-lchild NULL;D-rchild NULL;BiTNode* E (BiTNode*)malloc(sizeof(BiTNode));E-data E;E-lchild NULL;E-rchild NULL;//快速创建A,B,C,D,E5个结点A-lchild B;A-rchild C;B-lchild D;B-rchild E;层序遍历的核心代码
使用队列来进行辅助遍历 首先遍历二叉树的第一层A先入队遍历完第一层的时候然后A出队,并打印A 结点。 当A出队的时候,遍历A的左孩子此时A的左孩子不为NULL将左孩子B入队然后遍历A的右孩子此时A的右孩子不为NULL将右孩子C入队。 开始遍历第二层B结点此时B结点已经入队将B结点出队并打印B结点。 当B出队的时候,遍历B的左孩子此时B的左孩子不为NULL将左孩子D入队然后遍历B的右孩子此时B的右孩子不为NULL将右孩子E入队。 开始遍历第二层C结点此时C结点已经入队将C结点出队并打印C结点。 当C出队的时候,遍历C的左孩子此时C的左孩子为NULL将NULL入队相当于没有数据入队。然后遍历C的右孩子此时C的右孩子为NULL将NULL入队,相当于没有数据入队。 根据同样的道理遍历结点D,E,直到队为空完成所有遍历。 核心代码
/层序遍历(存的数据)
void LevelOrder(BiTNode* T)
{//创建一个队列queueEmpeType q;//用于存放队头EmpeType tmp 0;if (T NULL)return;//入队q.push(T-data);while (!q.empty()){//取出队的头元素tmp q.front();cout tmp ;if (T-lchild ! NULL){//当左孩子不为空则入队q.push(T-lchild-data);}if (T-rchild ! NULL){//当右孩子不为空则入队q.push(T-rchild-data);}Sleep(1000);//出队if (T-lchild ! NULL){T T-lchild;}else if (T-rchild ! NULL){T T-rchild;}//弹出队头元素q.pop();}
}源代码 队中存数据
#includeiostream
using namespace std;
#includequeue
#includewindows.htypedef char EmpeType;
typedef struct BiTNode {EmpeType data; //数据域struct BiTNode* lchild; //左孩子struct BiTNode* rchild; //右孩子
}BitNode;//层序遍历(存的数据)
void LevelOrder(BiTNode* T)
{//创建一个队列queueEmpeType q;//用于存放队头EmpeType tmp 0;if (T NULL)return;//入队q.push(T-data);while (!q.empty()){//取出队的头元素tmp q.front();cout tmp ;if (T-lchild ! NULL){//当左孩子不为空则入队q.push(T-lchild-data);}if (T-rchild ! NULL){//当右孩子不为空则入队q.push(T-rchild-data);}Sleep(1000);//出队if (T-lchild ! NULL){T T-lchild;}else if (T-rchild ! NULL){T T-rchild;}//弹出队头元素q.pop();}
}int main()
{//快速创建一个树BiTNode* A (BiTNode*)malloc(sizeof(BiTNode));A-data A;A-lchild NULL;A-rchild NULL;BiTNode* B (BiTNode*)malloc(sizeof(BiTNode));B-data B;B-lchild NULL;B-rchild NULL;BiTNode* C (BiTNode*)malloc(sizeof(BiTNode));C-data C;C-lchild NULL;C-rchild NULL;BiTNode* D (BiTNode*)malloc(sizeof(BiTNode));D-data D;D-lchild NULL;D-rchild NULL;BiTNode* E (BiTNode*)malloc(sizeof(BiTNode));E-data E;E-lchild NULL;E-rchild NULL;A-lchild B;A-rchild C;B-lchild D;B-rchild E;LevelOrder(A);return 0;
}运行结果 源代码2 队中存地址
#includeiostream
using namespace std;
#includequeue
#includewindows.htypedef char BitEmpeType;
typedef struct BiTNode {BitEmpeType data;struct BiTNode* lchild;struct BiTNode* rchild;
}BitNode;
typedef BiTNode* QEmpeType;//层序遍历(队中存的指针)
void LevelOrder(BiTNode* T)
{//创建一个队列queueQEmpeType q;//用于存放队头BitEmpeType tmp 0;if (T NULL)return;//入队q.push(T);while (!q.empty()){tmp q.front()-data;//打印cout tmp ;if (q.front()-lchild ! NULL){q.push(q.front()-lchild);}if (q.front()-rchild ! NULL){q.push(q.front()-rchild);}Sleep(1000);//出队q.pop();}
}int main()
{//快速创建一个树BiTNode* A (BiTNode*)malloc(sizeof(BiTNode));A-data A;A-lchild NULL;A-rchild NULL;BiTNode* B (BiTNode*)malloc(sizeof(BiTNode));B-data B;B-lchild NULL;B-rchild NULL;BiTNode* C (BiTNode*)malloc(sizeof(BiTNode));C-data C;C-lchild NULL;C-rchild NULL;BiTNode* D (BiTNode*)malloc(sizeof(BiTNode));D-data D;D-lchild NULL;D-rchild NULL;BiTNode* E (BiTNode*)malloc(sizeof(BiTNode));E-data E;E-lchild NULL;E-rchild NULL;A-lchild B;A-rchild C;B-lchild D;B-rchild E;LevelOrder(A);return 0;
}觉得我回答有用的话记得点个关注哟谢谢支持