按照层次打印二叉树算法C++实现
来源:互联网 发布:无人机与人工智能 编辑:程序博客网 时间:2024/06/06 12:57
#include<iostream>#include<cstdlib>#include<vector>#include<queue>using namespace std;vector<char>::size_type n=0;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x):val(x), left(NULL), right(NULL) { }};class Serialize{public: void serialize(TreeNode* head,vector<char> &B) //先序序列化:B存放序列化结果 { if(!head) { B.push_back('#'); B.push_back('!'); return; } int value=head->val; if(!value) { B.push_back('0'); B.push_back('!'); serialize(head->left,B); serialize(head->right,B); return; } int a=0; vector<int> A; while(value) { a=value%10; A.push_back(a); value/=10; } while(!A.empty()) { a=A.back(); A.pop_back(); B.push_back('0'+a); } B.push_back('!'); serialize(head->left,B); serialize(head->right,B); return; }};class DeSerialize{public: void deserialize(vector<char> A,TreeNode* & head) //先序反序列化:#空结点,!当前结点结束,n表示当前读的字符位置,A为输入原序列 { int i,j,value=0; if((n>A.size()-1)||A[n]=='#') return; i=j=n; while(A[j]!='!') j++; while(j>i) { value=(A[i]-'0')+value*10; i++; } head=(TreeNode*)malloc(sizeof(TreeNode)); (*head).val=value; (*head).right=(*head).left=NULL; n=i+1; deserialize(A,(*head).left); deserialize(A,(*head).right); }};class TreePrinter {public: vector<vector<int> > printTree(TreeNode* root) { vector<vector<int> > res; vector<int> temp; queue<TreeNode*> que; que.push(root); TreeNode *last=root,*nlast=NULL,*Now=NULL; while(!que.empty()) { Now=que.front(); cout<<Now->val; temp.push_back(Now->val); if(Now->left) { que.push(Now->left); nlast=Now->left; } if(Now->right) { que.push(Now->right); nlast=Now->right; } if(Now==last) { res.push_back(temp); temp.clear(); cout<<endl; last=nlast; } que.pop(); } return res; }};int main(){ char a[11]={'1','2','!','3','!','#','!','#','!','#','!'}; vector<char> sor(a,a+11); DeSerialize b; TreeNode* T=NULL; b.deserialize(sor,T); Serialize c; vector<char> res; c.serialize(T,res); for(int i=0;i!=res.size();i++) cout<<res[i]<<" "; cout<<endl; vector<vector<int> > res1; TreePrinter d; res1=d.printTree(T); for(vector<vector<int> >::iterator iter1=res1.begin();iter1!=res1.end();iter1++) { for(vector<int>::iterator iter2=(*iter1).begin();iter2!=(*iter1).end();iter2++) cout<<*iter2<<" "; cout<<endl; } return 0;}
阅读全文
0 0
- 按照层次打印二叉树算法C++实现
- 按照层次打印二叉树
- 设计一个算法,按照层次打印这棵二叉树。
- 按照层次遍历并打印二叉树
- [牛客]有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
- 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,
- 按照层次遍历二叉树
- 层次打印二叉树
- 层次打印二叉树
- 层次打印二叉树
- 二叉树的层次遍历及之形打印算法 Java实现
- 按照之字形打印二叉树
- 牛客网 算法第一题 二叉树按层次打印问题
- 笔试面试算法经典--二叉树层次打印
- 层次结构打印二叉树
- 按层次打印二叉树
- 二叉树层次遍历打印
- Python二叉树层次打印
- java第七天/10.15
- JAVA 循环语句作业
- Ionic中单选按钮radio的简单使用
- UVa10905
- python input,raw_input函数
- 按照层次打印二叉树算法C++实现
- JAVAWEB文件下载
- Vue.js简介
- 转载
- 第一行笔记-常用控件
- 第11章
- 第五章 使用形态学滤波对图像进行开闭运算
- C#之父——安德斯·海尔斯伯格
- java中静态方法上