前序序列化/反序列化二叉树
2015-09-06 15:07
323 查看
序列化:
反序列化:
Leetcode 331 Verify Preorder Serialization of a Binary Tree 判断是否是一个合法前序序列,这个版本要求所有的非空结点(包括序列中最后的)都要输出孩子,所以序列最后两个必然都是“#”
public class Solution {
public boolean isValidSerialization(String preorder) {
return help(preorder) && i >= preorder.length();
}
private boolean help(String preorder) {
if (i >= preorder.length()) return false;
int j = preorder.indexOf(',', i);
if (j < 0) j = preorder.length();
String val = preorder.substring(i, j);
i = j + 1;
if (val.equals("#")) return true;
else return help(preorder) && help(preorder);
}
private int i = 0;
}
vector<string> serializeTreePreOrder(TreeNode* root) { vector<string> ans; function<void(TreeNode*)> preOrder = [&](TreeNode* root) { ans.push_back(root ? to_string(root->val) : "#"); if (!root) return; preOrder(root->left); preOrder(root->right); }; preOrder(root); return ans; }
反序列化:
TreeNode* deserializeTreePreOrder(vector<string> &A, int &i) { if (i == A.size()) return nullptr; string s = A[i++]; if (s == "#") return nullptr; else { auto root = new TreeNode(stoi(s)); root->left = deserializeTreePreOrder(A, i); root->right = deserializeTreePreOrder(A, i); return root; } }
Leetcode 331 Verify Preorder Serialization of a Binary Tree 判断是否是一个合法前序序列,这个版本要求所有的非空结点(包括序列中最后的)都要输出孩子,所以序列最后两个必然都是“#”
public class Solution {
public boolean isValidSerialization(String preorder) {
return help(preorder) && i >= preorder.length();
}
private boolean help(String preorder) {
if (i >= preorder.length()) return false;
int j = preorder.indexOf(',', i);
if (j < 0) j = preorder.length();
String val = preorder.substring(i, j);
i = j + 1;
if (val.equals("#")) return true;
else return help(preorder) && help(preorder);
}
private int i = 0;
}
相关文章推荐
- android 较高版本,页面分割线实现LinearLayoutCompat布局简单事例
- Android模拟位置实现
- ACM zoj 1789(并查集实现)
- Lost Cows(线段树 POJ2182)
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
- 最长递增子序列
- php laravel框架下通过jsonp跨域访问
- android 较高版本,页面分割线实现LinearLayoutCompat布局简单事例
- Lost Cows(线段树 POJ2182)
- 双循环链表的实现及其功能!!!
- mybatis JDBC类型
- C++实现的完整伸展树程序
- TFT 显示字符串和汉字
- IOS开发之实现App消息推送(最新)
- 9.6-Web技术记录
- jboss无法自动创建Queue和Topic 发布时出现错误javax.naming.namenotfoundexception: myqueue not bound
- FragmentActivity 被垃圾回收后如何处理
- 关于读书
- 你所不知道的事儿--C++类模板的声明和实现不能分离
- arcgis for android 学习 - (7) 在真机上 模拟GPS