【刷题之路】二叉树先序序列化
2016-05-31 09:53
127 查看
将一颗二叉树先序遍历并输出一个字符串,每个数字后加‘!’作为分隔,空节点记为‘#!’
class TreeToString {
public:
string toString(TreeNode* root) {
string res;
string temp;
stack<TreeNode*> p1;
TreeNode* cur;
p1.push(root);
while(!p1.empty()){ //利用循环先序遍历二叉树
cur=p1.top();
p1.pop();
if(cur==NULL){
res+="#!";
continue;
}
temp=str1(cur->val); //整型转字符串,可以替换为sprintf函数,功能一样
temp+='!';
res+=temp;
if(cur) p1.push(cur->right); //即时左右孩子节点为空,依然押入,只有当当前节点为空时停止,与二叉树先序遍历稍有不同
if(cur) p1.push(cur->left);
else res+="#!";
}
return res;
}
string str1(int a){
std::stringstream ss; //字符串流std ,将节点val变为字符串
ss << a;
return ss.str();
}
};
class TreeToString {
public:
string toString(TreeNode* root) {
string res;
string temp;
stack<TreeNode*> p1;
TreeNode* cur;
p1.push(root);
while(!p1.empty()){ //利用循环先序遍历二叉树
cur=p1.top();
p1.pop();
if(cur==NULL){
res+="#!";
continue;
}
temp=str1(cur->val); //整型转字符串,可以替换为sprintf函数,功能一样
temp+='!';
res+=temp;
if(cur) p1.push(cur->right); //即时左右孩子节点为空,依然押入,只有当当前节点为空时停止,与二叉树先序遍历稍有不同
if(cur) p1.push(cur->left);
else res+="#!";
}
return res;
}
string str1(int a){
std::stringstream ss; //字符串流std ,将节点val变为字符串
ss << a;
return ss.str();
}
};
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- C语言二叉树的非递归遍历实例分析
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析