二叉树层遍历
来源:互联网 发布:淘宝上哪家卖红酒靠谱 编辑:程序博客网 时间:2024/05/22 15:53
二叉树的层遍历又可以成为广度优先遍历,广度优先通常都可以利用队列来解决:首先把根节点加入队列,然后判断队列是否为空,若非空就把队头元素作为当前节点,然后依次判断当前节点的左右子节点是否为空,若非空则加入队列;循环上述过程,直到队列为空。代码如下:
#include "stdafx.h"#include<iostream>#include <queue>#include <vector>using namespace std;typedef struct binary_tree_node{struct binary_tree_node* left;struct binary_tree_node* right;int data;}Binary_Tree_Node;void visit(Binary_Tree_Node* pNode){if (pNode!=NULL){cout<<pNode->data<<" ";}}Binary_Tree_Node* create_tree(vector<int> dataVec);void insert_node(Binary_Tree_Node* root,int data);void level_order(Binary_Tree_Node* root);void free_node(Binary_Tree_Node* root);int _tmain(int argc, _TCHAR* argv[]){int tmpArray[]={1,2,3,4,5,6,7,};vector<int> input(tmpArray,tmpArray+7);Binary_Tree_Node *root=create_tree(input);level_order(root);free_node(root);return 0;}Binary_Tree_Node* create_tree(vector<int> dataVec){if (dataVec.size()==0){return nullptr;}Binary_Tree_Node *root=new Binary_Tree_Node();root->left=NULL;root->right=NULL;root->data=dataVec[0];for (int i=1;i<dataVec.size();++i){insert_node(root,dataVec[i]);}return root;}void insert_node(Binary_Tree_Node* root,int data){if (root->left==NULL){Binary_Tree_Node* leftChild=new Binary_Tree_Node();leftChild->left=NULL;leftChild->right=NULL;leftChild->data=data;root->left=leftChild;return;}if (root->right==NULL){Binary_Tree_Node* leftChild=new Binary_Tree_Node();leftChild->left=NULL;leftChild->right=NULL;leftChild->data=data;root->right=leftChild;return;}insert_node(root->left,data);}void level_order(Binary_Tree_Node* root){if (root==NULL){return;}queue<Binary_Tree_Node*> pQueue;pQueue.push(root);while(!pQueue.empty()){Binary_Tree_Node *curNode=pQueue.front();pQueue.pop();visit(curNode);if (curNode->left!=NULL){pQueue.push(curNode->left);}if (curNode->right!=NULL){pQueue.push(curNode->right);}}}void free_node(Binary_Tree_Node* root){if (root->left!=NULL){free_node(root->left);}if (root->right!=NULL){free_node(root->right);}delete root;root=NULL;}上述程序生成的二叉树如下图:
层遍历程序结果如下:
0 0
- 二叉树层遍历
- 层遍历二叉树
- 按层遍历二叉树
- 层序遍历二叉树
- 层序遍历二叉树
- 按层遍历二叉树
- 按层遍历二叉树
- 按层遍历二叉树
- 按层遍历二叉树
- 二叉树层次序遍历
- 二叉树的层遍历
- 层序遍历二叉树
- 按层遍历二叉树
- 层序遍历二叉树
- 二叉树-层序遍历
- 二叉树------层序遍历
- 层序遍历二叉树
- 层序遍历二叉树
- 【杭电2098】分拆素数和
- hdu 4635 Strongly connected Kosaraju/Tarjan求强联通分量大小
- MySQL配置
- OC编码风格
- 图片处理类(剪裁、缩放、水印)
- 二叉树层遍历
- Java Exchange企业邮件服务器 发Email
- DZ迁移
- HDU5120 Intersection 相交环总面积 (2014北京现场赛) 两圆香蕉模板
- 坦克大战_我方坦克发射子弹
- Activity的启动模式
- 铁打的营盘流水的兵- 离职风险评估
- hdu 2243 考研路茫茫——单词情结
- Ant build文件结构