二叉树生成字符串,字符串生成二叉树

通常的方式,都是二叉树生成字符串
字符串生成二叉树,遵循二叉树的递归生成字符串的方式进行遍历。

"""
    1.二叉树先序遍历,可以保证按照容易理解的角度从上到下进行遍历,显示,输出
    2.先序后序中序遍历,都是 深度递归,显示上都会与直接直觉有出入
    3.通过遍历后的字符串,反出建立 二叉树,可以尊徐 序列化的模式进行建立,同样适用。
      由于遍历是深度递归形成字符串,所以生成二叉树同样可以深度递归。碰到终止标志,才终止深度递归转向另一个方向。
    bug原因:字符串的遍历方式,除了顺序遍历方式,也可以采用递归便利方式,遵循递归的规律。

"""
class TreeNode(object):
    def __init__(self,value):
        self.value=value
        self.leftnode=None
        self.rightnode=None
str_raw='1246###5#73#89##'
def deserialize(chars):
    if len(chars)==0:
        return None
    assert isinstance(chars,list)
    char_cur=chars.pop(0)
    if char_cur=='#':
        return None
    else:
        node_cur=TreeNode(char_cur)
        node_cur.leftnode=deserialize(chars)
        node_cur.rightnode=deserialize(chars)
        return node_cur

out=deserialize(list(str_raw))
print(out)

str_out=''
def serialization(tree_in):
    global str_out
    str_out=str_out+tree_in.value
    if tree_in.leftnode:
        serialization(tree_in.leftnode)
    else:
        str_out+='#'
    if tree_in.rightnode:
        serialization(tree_in.rightnode)
    else:
        str_out+='#'
serialization(out)
print(str_out)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值