您的位置:首页 > 其它

前序序列化/反序列化二叉树

2015-09-06 15:07 323 查看
序列化:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: