树的队列广度遍历
来源:互联网 发布:apache编译调试选项 编辑:程序博客网 时间:2024/05/01 17:30
#include<stdio.h>
#include <stdlib.h>
typedef struct _Tree
{
int nValue;
struct _Tree* pLeft;
struct _Tree* pRight;
}Tree;
void CreateTree(Tree* *tree)
{
(*tree) = (Tree*)malloc(sizeof(Tree));
(*tree)->nValue = 1;
(*tree)->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->nValue = 2;
(*tree)->pLeft->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->pLeft->nValue = 4;
(*tree)->pLeft->pLeft->pLeft = NULL;
(*tree)->pLeft->pLeft->pRight = NULL;
(*tree)->pLeft->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->pRight->nValue = 5;
(*tree)->pLeft->pRight->pLeft = NULL;
(*tree)->pLeft->pRight->pRight = NULL;
(*tree)->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->nValue = 3;
(*tree)->pRight->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->pLeft->nValue = 6;
(*tree)->pRight->pLeft->pLeft = NULL;
(*tree)->pRight->pLeft->pRight = NULL;
(*tree)->pRight->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->pRight->nValue = 7;
(*tree)->pRight->pRight->pLeft = NULL;
(*tree)->pRight->pRight->pRight = NULL;
}
typedef struct _Queue
{
Tree* pTree; // 装一个树的节点
struct _Queue* pNext;
}Queue;
void Push(Queue** pHead,Queue** pEnd,Tree* tree) // 把 树的节点放到 队列
{
if (pHead == NULL || pEnd == NULL)
{
return;
}
Queue* temp = (Queue*)malloc(sizeof(Queue));
temp->pTree = tree;
temp->pNext = NULL;
if (!(*pHead))
{
(*pHead) = temp;
(*pEnd) = temp;
}
else
{
(*pEnd)->pNext = temp;
(*pEnd) = temp;
}
}
Tree* Pop(Queue** pHead,Queue** pEnd) // 出队 得到 这个节点里装的东西
{
if (pHead == NULL || pEnd == NULL || *pHead == NULL)
{
return NULL;
}
else
{
Tree* tree = (*pHead)->pTree;
Queue* pDel = (*pHead);
// 看 是不是 就一个节点
if ((*pHead)->pNext == NULL)
{
(*pEnd) = NULL;
}
(*pHead) = (*pHead)->pNext;
free(pDel);
pDel = NULL;
return tree;
}
}
void WidePrint(Tree* tree)
{
Queue* pHead = NULL;
Queue* pEnd = NULL;
while(tree != NULL)
{
printf("%d ",tree->nValue);
// 看这个节点有没有左右
if(tree->pLeft)
Push(&pHead,&pEnd,tree->pLeft);
if(tree->pRight)
Push(&pHead,&pEnd,tree->pRight);
// 出队
tree = Pop(&pHead,&pEnd);
}
//if (tree == NULL)
//{
// return;
//}
//
//Queue* pHead = NULL;
//Queue* pEnd = NULL;
//Push(&pHead,&pEnd,tree);
//while(pHead != NULL)
//{
// // 出队
// tree = Pop(&pHead,&pEnd);
// printf("%d ",tree->nValue);
// // 看这个节点有没有左右
// if(tree->pLeft)
// Push(&pHead,&pEnd,tree->pLeft);
// if(tree->pRight)
// Push(&pHead,&pEnd,tree->pRight);
//}
}
int main()
{
Tree* root = NULL;
CreateTree(&root);
WidePrint(root);
system("pause");
return 0;
}
- 树的队列广度遍历
- 图的广度优先遍历::邻接矩阵+队列.
- 二叉树的深度优先遍历(栈)和广度优先遍历(队列)
- 二叉树的深度优先遍历(栈)和广度优先遍历(队列)
- 树的广度优先遍历
- 广度优先遍历队列实现
- LeetCode 102. Binary Tree Level Order Traversal 树的广度优先遍历 辅助数据结构队列
- 无向图的深度广度遍历 递归 队列
- 利用队列实现图的广度优先遍历
- 二叉树的广度优先遍历
- 二叉树的广度遍历算法
- 二叉树的深度广度遍历
- [算法学习]树的广度遍历
- 树的广度深度优先遍历
- 二叉树的广度优先遍历
- 二叉树的广度与深度遍历
- 二叉树的深度广度遍历
- 二叉搜索树的广度优先遍历
- Softerra LDAP Browser 使用及配置 有图有真相
- 配置ssh公钥访问oschina
- hagha
- 7 获取内存和SD卡状态
- 使用接插件需要注意的问题
- 树的队列广度遍历
- C++ 全局/静态对象初始化
- DSP6000的上电及供电
- 第一个项目(六)跳跃动作的初步优化
- const可以使得函数重载
- 三菱PLC、西门子PLC、欧姆龙PLC、松下PLC自定义协议RS485接线篇
- Away3D之---------------简单的后处理 灰度滤镜(GrayFilter)
- 读书札记-2013年12月
- STL常用容器详细解析