面试37题:

题:序列化二叉树

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

解题思路:首先来看二叉树的序列化,二叉树的序列化就是采用前序遍历二叉树输出节点,再碰到左子节点或者右子节点为None的时候输出一个特殊字符”#”。对于反序列化,就是针对输入的一个序列构建一棵二叉树,我们可以设置一个指针先指向序列的最开始,然后把指针指向位置的数字转化为二叉树的结点,后移一个数字,继续转化为左子树和右子树。当遇到当前指向的字符为特殊字符”#”或者指针超出了序列的长度,则返回None,指针后移,继续遍历。

解题代码:

# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
flag=-1
def Serialize(self, root):
# write code here
if not root:
return '#'
return str(root.val)+','+self.Serialize(root.left)+','+self.Serialize(root.right) def Deserialize(self, s):
# write code here
self.flag+=1
lis=s.split(',') if self.flag>=len(s):
return None root=None
if lis[self.flag]!='#':
root=TreeNode(int(lis[self.flag]))
root.left=self.Deserialize(s)
root.right=self.Deserialize(s)
return root

最新文章

  1. 如何理解javaSript中函数的参数是按值传递
  2. 初学Python之os模块
  3. 理解 Statement 和 PreparedStatement
  4. 乱码电路(Garbled circuits)
  5. QIBO CMS SQL Injection Via Variable Uninitialization In \member\special.php
  6. Cross-Site Scripting(XSS)的类型
  7. Node.js文件系统、路径的操作函数
  8. TIDB ---NEW SQL
  9. UVa12657 - Boxes in a Line(数组模拟链表)
  10. mac下安装redis
  11. svn命令的使用
  12. ssh 与 Telnet 的区别
  13. C#:占位符的例子
  14. [转载]HDFS的'Block'和MapReduce的'Split'之间的关系和区别
  15. cpu有哪些架构
  16. Search a 2D Matrix【python】
  17. Linux下DB2数据库安装教程
  18. Bmob后端云学习(未完)
  19. @PathVariable
  20. k8s容器的资源限制

热门文章

  1. awk 截取字符串
  2. CentOS环境下yum安装LAMP
  3. 【Python + ATX基于uiautomator2】之编写unittest自动化测试脚本
  4. I.MX6 Ethernet MAC (ENET) MAC Address hacking
  5. 模式识别之概率分布---平均分布,正态分布,一阶滑动和,一阶线性回归 C语言编程
  6. mysql增加自定义函数功能
  7. Android 自定义权限 (<permission> <uses-permission>)
  8. 拍照权限,GPS权限的控制
  9. Android无线测试之—UiAutomator UiDevice API介绍三
  10. C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)