首页 > 剑指offer:面试题37. 序列化二叉树

剑指offer:面试题37. 序列化二叉树

题目:序列化二叉树

请实现两个函数,分别用来序列化和反序列化二叉树。

示例: 

你可以将以下二叉树:

    1

   /

  2   3

     /

    4   5

序列化为 "[1,2,3,null,null,4,5]"


解题:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Codec {
private:// 1,2,#,#,3,-4,#,#,5,#,#,void encode(TreeNode* root, string& res) {if (!root) {res += "#,";return;}res += to_string(root->val) + ",";encode(root->left, res);encode(root->right, res);}TreeNode* decode(int& p, const string& data) {if (data[p] == '#') {p += 2;return NULL;}bool isN = false;if (data[p] == '-') {  // 负数的情况isN = true;p++;}int num = 0;  // 还原成整数while (data[p] != ',') {num = num * 10 + data[p] - '0';p++;}p++;if (isN) num = -num;auto root = new TreeNode(num);root->left = decode(p, data);root->right = decode(p, data);return root;}public:// Encodes a tree to a single string.string serialize(TreeNode* root) {string res = "";encode(root, res);return res;}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {int p = 0;return decode(p, data);}
};

 

更多相关:

  • 学习计划 MyPlan11 主题:Python描述统计、简单统计图形 时间:8.5-8.11周内完成 参考资料:新书《谁说菜鸟不会数据分析python篇》 各位星友们,在这个星球里每个人都要逼迫自己学习未知的领域或知识点,每天进步一点点,积累的时间久了 ,菜鸟也能起飞。 完成情况: 在pandas中,使用describe函数进行描述统...

  • 利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。 TCPServer/UDPS...

  • sd.js  import $global from "./global"; import $g from "./sg"; import $ from "jquery"; import {Message, Loading} from "element-ui";//引入饿了么相关组件 import {Base64} from "js-...

  •     原生sd.js----------------------------------------------------------------  const API_ROOT_URL = "http://www.api.com";const $d= {_postList_url: API_ROOT_URL + "/api...

  • 问题链接 LeetCode 7 题目解析 给定一个32位有符号整数,求其反转数字。 解题思路 如果是简单反转的话,那这道题就太简单了。题目要求判断溢出问题,32位int类型的范围是-2147483648~2147483647。数字反转过后是有可能超出范围的,此时应该返回0。 最简单的想法是,反转结果用long long表示,其范围远超...

  • 这两天在看小程序的地图,写写笔记记录一下 小程序官方文档提供的方法 https://mp.weixin.qq.com/debug/wxadoc/dev/api/location.html 腾讯地图提供的jssdk http://lbs.qq.com/qqmap_wx_jssdk/qqmapwx.html 根据提示使用腾讯地图jssdk...

  • 1.链接地址: http://bailian.openjudge.cn/practice/2739/ 2.题目: 总时间限制:1000ms内存限制:65536kB描述给定两个正整数a和b。可以知道一定存在整数x,使得x <= logab < x + 1输出x输入第1行是测试数据的组数n,每组测试数据占2行,分别是a和b。每组测试数据之...

  • 题目:从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7],     3    /   9  20     /      15   7 返回其层次遍历结果: [   [3],   [9,20],   [...

  • 题目:对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。     1    /   2   2  / / 3  4 4  3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:...

  • 题目:二叉树的镜像 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入:      4    /      2     7  /   / 1   3 6   9 镜像输出:      4    /      7     2  /   / 9   6 3   1 示例 1: 输入:root =...

  • 题目:树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A:      3     /    4   5   /  1   2 给定的树 B:    4    /  1 返回 true,因为 B...

  • 下面是树类型题目需要用到的头文件tree.h,请包含在cpp文件中编译,而不是放在c文件中编译,比如查找树中两个节点的最低公共父结点的题common_parent_in_tree.cpp,编译它的方法是: g++ -g common_parent_in_tree.cpp -o common_parent_in_tree 下...