剣指offer-シーケンス化二叉木-python
5333 ワード
タイトルの説明:
2つの関数を実装してください.それぞれシリアル化と逆シーケンス化のツリーに使用します.ツリーのシーケンス化:1本のツリーを何らかの遍歴方式の結果に従って何らかのフォーマットで文字列として保存し、メモリに構築されたツリーを永続的に保存することを指す.シーケンス化は、シーケンス、中シーケンス、後シーケンス、レイヤシーケンスのツリー遍歴方式に基づいて変更できます.シーケンス化の結果は文字列であり、シーケンス化時にある記号で空のノード(#)を表します.ノード値の終了を表します(value!). ツリーの逆シーケンス化:ある遍歴順序に基づいて得られたシーケンス化文字列結果strを指し、ツリーを再構成する.
考え方:シーケンス化:シーケンス遍歴、文字列間用','間隔 逆シーケンス前シーケンスは「ルート左右」の順序を遍歴し、ルートノードはその左右のサブノードの前に位置し、すなわち非空(#)の最初のノードはあるサブツリーのルートノードであり、左右のサブノードはそのルートノードの後に、空のノード#を区切り記号とする.
ACコード
2つの関数を実装してください.それぞれシリアル化と逆シーケンス化のツリーに使用します.
考え方:
ACコード
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# , ','
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):
list = s.split(',')
return self.deserializeTree(list)
def deserializeTree(self, list):
if len(list)<=0:
return None
val = list.pop(0)
root = None
if val != '#':
root = TreeNode(int(val))
root.left = self.deserializeTree(list)
root.right = self.deserializeTree(list)
return root