题目要求是对二叉树进行前序遍历与反构筑二叉树;我觉得到了这里的题目,很多知识点都已经讲过了,关于二叉树的问题,请参考二叉树的预备知识,以及剑指offer之前的四道二叉树的题目。
《剑指offer》预备知识-链表与二叉树
《剑指offer》06&07、二叉树的重构与下一个结点
《剑指offer》23&24、树的子结构与镜像二叉树
这次直接上代码,没啥好说的。尤其是前序遍历,老朋友了
# offer33-solution
class Solution:
flag = -1
def Serialize(self, root):
if not root: # 前序遍历,简单递归
return '$'
return str(root.val) + ',' + self.Serialize(root.left) + ',' + self.Serialize(root.right)
def Deserialize(self, s):
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])) # 此时根节点的值为lis的self.flag项
root.left = self.Deserialize(s) # 左右子树递归
root.right = self.Deserialize(s)
return root