二叉树的建立和基础操作<三> —— (三种遍历及分层打印)
来源:互联网 发布:linux telnet命令 编辑:程序博客网 时间:2024/05/19 20:57
#include<iostream>#include<vector>#include<queue>#include<math.h> #include<string.h>#include<algorithm> using namespace std;typedef struct BinaryTree{char val;struct BinaryTree *left;struct BinaryTree *right;}BinaryTree,*BitTree;//******递归建立二叉树*****// //先建立根节点,再建立左子树,最后建立右子树/***********测试用例: a b c # d # e f # # # # #输入:ab#df###c#e## ***************/int create_tree(BitTree &T){char val = getchar();if(val == '#')T = NULL;else {T = new BinaryTree;T -> val = val;create_tree(T->left);create_tree(T->right);}return 0;}//*****前序递归遍历二叉树*****//void Preorder(BitTree T){if(T){cout<<T->val<<" ";Preorder(T->left);Preorder(T->right);}}//*****中序递归遍历二叉树*****// void Midorder(BitTree T) { if(T){Midorder(T->left);cout<<T->val<<" ";Midorder(T->right);} } //*****后序递归遍历二叉树*****// void behindorder(BitTree T){if(T){behindorder(T->left);behindorder(T->right);cout<<T->val<<" ";}} //*****按层遍历*****////设置游标last,分层打印二叉树 int layerorder_1(BitTree T){vector<BitTree> vec;vec.push_back(T);int cur = 0;int last = 1;while(cur < vec.size()){last = vec.size();//设置last游标 while(cur < last) //当last == cur时,退出循环,打印回车 {cout<<vec[cur]->val<<" ";if(vec[cur]->left)vec.push_back(vec[cur]->left);if(vec[cur]->right)vec.push_back(vec[cur]->right);cur++;}cout<<endl;}return 0;}//改写BFS,分层打印二叉树 int layerorder_2(BitTree T) {int parentSize = 1, childSize = 0;BitTree temp;queue<BitTree > q;q.push(T);do{temp = q.front();cout<<temp->val<<" ";q.pop();parentSize--; //每次pop一个节点,parentSize减去1 if(temp->left){q.push(temp->left);childSize++;}if(temp->right){q.push(temp->right);childSize++;}if(parentSize == 0) //当根节点出栈完毕时,表示本层可以输出回车了 { //此时更新下一层parentSize,将childSize写入 parentSize = childSize; //childSize 赋值为0 childSize = 0;cout<<endl;} }while(!q.empty());return 0;}int main(){BitTree T;create_tree(T);cout<<"前序遍历结果(递归):"<<endl; Preorder(T);cout<<endl<<"中序遍历结果(递归):"<<endl;Midorder(T);cout<<endl<<"后序遍历结果(递归):"<<endl;behindorder(T);cout<<endl<<"层次遍历结果1:"<<endl; layerorder_1(T);cout<<endl<<"层次遍历结果2:"<<endl; layerorder_2(T);return 0;}
程序运行结果:
0 0
- 二叉树的建立和基础操作<三> —— (三种遍历及分层打印)
- 二叉树的建立删除及三种遍历实现
- 二叉树的建立删除及三种遍历实现
- 数据结构 二叉树的建立及三种遍历方法
- 二叉树的分层打印(三)
- 实验三 二叉树的基本操作(建立)及遍历
- 二叉树基本数学知识,建立及三种递归遍历
- 二叉树的层次遍历,从上到下和从下到上分层打印
- 二叉树的建立和基础操作<二> —— (层次遍历和计算二叉树的宽度)
- [树]二叉树的建立以及三种遍历
- 二叉树的建立以及三种遍历方式
- 二叉树的建立和三种遍历的递归方式
- C++实现二叉树的建立和三种递归遍历
- 二叉树(一)——二叉树的构造及三种遍历算法的递归实现(java版)
- Java实现二叉树建立以及三种遍历
- 二叉树的建立、遍历、打印
- 二叉树的建立、遍历、打印
- 二叉树的三种遍历和删除
- 【Arduino官方教程】数字处理示例(五):按键状态变化检测
- 利用Eclipse集成开发环境进行ROS开发
- 会话管理之Session
- 关于LCA(Tarjan+ST)
- CENTOS 6.5 配置YUM安装NGINX
- 二叉树的建立和基础操作<三> —— (三种遍历及分层打印)
- HTML5地理位置Geolocation以及百度地图应用
- Python的多版本如何处理--请使用pyenv
- POJ 2828 Buy Tickets
- Ubuntu中文系统超级终端使用英文提示
- UVA11461Square Numbers
- css 新颖的表单边框
- Android中文API(141) —— GridLayout
- C++ inline函数相关总结