广度优先遍历(c/c++实现)
2015-01-06 00:03
204 查看
二叉树中的深度优先遍历DFS和广度优先遍历BFS,是对树的一种很常见操作。特别是树的深度优先遍历,常见方式有三种:前序,中序和后序。
二叉树结构图:
1
/ \
2 3
/ \
4 5
/ \
6 7
所以广度优先遍历的结构是:1 2 3 4 5 6 7 ;中序遍历的结果是:6 4 7 2 5 1 3
#include <stdio.h> #include <stdlib.h> #include <vector> using namespace std; typedef struct Node { int data; struct Node *left; struct Node *right; } Node ; void create_btree(Node **root,const int data) { if(root==NULL) { fprintf(stdout,"arg is illegal"); exit(-1); } if(*root==NULL) { *root = (Node*)malloc(sizeof(Node)); (*root)->data = data; (*root)->left = NULL; (*root)->right = NULL; } else { Node *p = *root; if(p->left==NULL) { create_btree(&(p->left),data); } else if(p->right==NULL) { create_btree(&(p->right),data); } else { create_btree(&(p->left),data); } } } void BFS(Node *root) { int head = 0; int end = 0; vector<Node*> v; if(root==NULL) { return ; } v.push_back(root); while(v[end]!=NULL) { end = v.size(); for(int i=head;i<end;i++) { if(v[i]->left!=NULL) { v.push_back(v[i]->left); } if(v[i]->right!=NULL) { v.push_back(v[i]->right); } head++; } } for(int i=0;i<v.size();i++) { printf("%d ",v[i]->data); } } void DFS(Node *root) { if(root==NULL) { return ; } else { DFS(root->left); //调整语句的先后顺序,可实现树的前序,中序和后序遍历 printf("%d ",root->data); DFS(root->right); } } int main(void) { int a[] = {1,2,3,4,5,6,7}; const int len = sizeof(a)/sizeof(int); Node *root = NULL; for(int i=0;i<len;i++) { create_btree(&root,a[i]); } DFS(root); printf("\n"); BFS(root); return 0; }
二叉树结构图:
1
/ \
2 3
/ \
4 5
/ \
6 7
所以广度优先遍历的结构是:1 2 3 4 5 6 7 ;中序遍历的结果是:6 4 7 2 5 1 3
相关文章推荐
- C++实现图的邻接表存储和广度优先遍历实例分析
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- C++模板实现二叉查找树(四 广度优先遍历)
- C++模板实现二叉查找树(四 广度优先遍历)
- C++非递归队列实现二叉树的广度优先遍历
- C++模板实现二叉查找树(四 广度优先遍历)
- C++实现图的邻接矩阵的创建以及其深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 图的遍历之BFS广度优先遍历C++实现
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 数据结构之图---广度优先遍历---C++实现
- 图的深度优先和广度优先遍历(图以邻接表表示,由C++面向对象实现)
- 二叉树的深度优先遍历与广度优先遍历 [C++实现]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 求最大网络流的C++实现(利用广度优先遍历的思想)
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析