【剑指offer37】二叉树的序列化
2024-10-07 02:56:21
序列化过程很简单,如果是采用先序序列,那么对先序遍历做出改变即可;
层序遍历建立二叉树,如:
1
2 3
4 # 5 6
输入第一行:将要输入的节点的个数N,如上面的为7;
第二行:输入N个节点,
#include <iostream>
#include <string> #include <vector>
#include <queue> using namespace std; struct treeNode{
int val;
treeNode *left;
treeNode *right;
treeNode(){}
treeNode(int x):
val(x),left(NULL),right(NULL){}
}; int s_to_i(string str){
int v=;
unsigned int i=;
while(i<str.size()){
v=v*+str[i]-'';
}
return v;
}
treeNode* buildTree(int N){
if(N==){
return NULL;
} int i=;
int v=;
char c; cin>>c;
if(c=='#') return NULL; v=c-''; queue<treeNode*> q;
treeNode *root=new treeNode(v);
q.push(root); while(i<N&&!q.empty()){
treeNode *node=q.front();
q.pop(); if(i<N){
cin>>c;i++;
if(c!='#'){
v=c-'';
treeNode *lchild=new treeNode(v);
node->left=lchild;
q.push(lchild);
}
}
if(i<N){
cin>>c;i++;
if(c!='#'){
v=c-'';
treeNode *rchild=new treeNode(v);
node->right=rchild;
q.push(rchild);
}
}
}
return root;
}
void serialize(treeNode *root){
if(root==NULL){
cout<<'#'<<endl;return;
}
cout<<root->val<<endl;
if(root->left!=NULL || root->right!=NULL)
serialize(root->left);
if(root->left!=NULL || root->right!=NULL)
serialize(root->right);
}
int main()
{
int N;
cin>>N;
cout << "Build Tree" << endl;
treeNode *root=buildTree(N);
cout << "serialize Tree" <<endl;
serialize(root);
return ;
}
最新文章
- 李洪强iOS经典面试题142-第三方框架及其管理
- PMP 第十章 项目沟通管理
- USBDongle及Btool使用说明
- 十七、OGNL表达式
- support vector regression与 kernel ridge regression
- 关于SWT/JFace的事件模型的四种方式
- while if 循环判断
- 高效的SQL分页存储过程
- android系统reboot
- c/cpp中怎样切割字符串,相似于split的功能
- [AHOI2001]质数和分解
- SAP的 消息 弹出窗口(备忘)
- 带新手走进神秘的HTTP协议
- 3.1依赖注入「深入浅出ASP.NET Core系列」
- Python第八课学习
- 使用 dmidecode 查看Linux服务器信息
- 零基础http代理http完美代理访问
- SQL表两列取一列唯一值的记录
- 【062新题】OCP 12c 062出现大量新题-15
- windows7 sqlserver2012 无法写入受保护的内存 解决办法