【二叉树的存储:使用静态数组】

该文章描述了如何使用静态数组来表示FBI树,并通过后序遍历的方法进行构建和打印。首先,定义了数组tree表示树结构,然后通过递归的build函数依据输入序列s构建树,最后用postotder函数进行后序遍历输出树的节点。
摘要由CSDN通过智能技术生成

定义静态数组:tree=['']*n

根节点:tree[1]

节点tree[p]的左子节点:tree[2*p]

节点tree[p]的右子节点:tree[2*p+1]

FBI树

def build(p,L,R):
    if L==R:
        if s[L]=='1':
            tree[p]='I'
        else:
            tree[p]='B'
        return
    mid=(L+R)//2    #给出二叉树叶子节点,每次二分就是一层
    build(2*p,L,mid)
    build(2*p+1,mid+1,R)
    if tree[2*p]=='B' and tree[2*p+1]=='B':
        tree[p]='B'
    elif tree[2*p]=='I' and tree[2*p+1]=='I':
        tree[p]='I'
    else:
        tree[p]='F'

def postotder(p):
    if tree[2*p]!='':postotder(2*p)
    if tree[2 * p+1] != '': postotder(2 * p+1)
    print(tree[p], end='')

n=int(input())
s=[0]+list(input())
tree=['']*4096
build(1,1,len(s)-1)
postotder(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值