LeetCode-树-前序遍历(DFS)-二叉树的序列化与反序列化

1 题目

剑指 Offer 37. 序列化二叉树

剑指 Offer II 048. 序列化与反序列化二叉树

297. 二叉树的序列化与反序列化

对比“使用层序遍历的一个实现”:LeetCode-树-层序遍历(BFS)-二叉树的序列化与反序列化_hclbeloved的博客-CSDN博客

2 实现

// 此时使用的是 DFS
// 参考链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/solution/shou-hui-tu-jie-gei-chu-dfshe-bfsliang-chong-jie-f/
class Codec {
public:
	// Encodes a tree to a single string.
	string serialize(TreeNode* root) {
		if (!root)
            return "null";
        //使用前序遍历,是因为 根|左子树|右子树 的打印顺序,在反序列化时更容易定位出根节点的值。
        string res(to_string(root->val));
        res.append(1,',').append(serialize(root->left));
        res.append(1,',').append(serialize(root->right));
		return res;
	}

	// Decodes your encoded data to tree.
	TreeNode* deserialize(string data) {
		if (data.empty())
			return NULL;

		size_t pos = -1, lastPos = 0;
		string str;
		queue<string> q;
		while ((pos = data.find(',', lastPos)) != string::npos)
		{
			str = data.substr(lastPos, pos - lastPos);
			lastPos = pos + 1;
			q.push(str);
		}

		str = data.substr(lastPos);
		if (!str.empty())
		{			
			q.push(str);
		}

        return buildTree(q);
	}

    TreeNode* buildTree(queue<string>& q)
    {
        string str = q.front();
        q.pop();
		if (str.compare("null") == 0)
			return NULL;

        TreeNode *root = new TreeNode(std::stoi(str));
        root->left = buildTree(q);
        root->right = buildTree(q);

        return root;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值