首页 > 其他 > 详细

不规则递归转换为while,留底

时间:2014-03-15 12:25:17      阅读:487      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
def make(prd,ind):
    if prd and ind:
        root = prd[0]
        root_pos = ind.index(root)
        ind_left= ind[:root_pos]
        ind_right = ind[root_pos+1:]
        cut = len(ind_left)+1
        prd_left = prd[1:cut]
        prd_right = prd[cut:]
        left = make(prd_left,ind_left)
        right = make(prd_right,ind_right)
        return [root,left,right]

def xmake(prd,ind):
    stacks=[Stack(stg=0,prd=prd,ind=ind)]
    while stacks:
        c = stacks.pop()
        if c.stg==0:
            c.stg=1
            if c.prd and c.ind:
                root=c.prd[0] 
                c.tree_list=[root]
                root_pos = c.ind.index(root)
                ind_left = c.ind[:root_pos]
                cut = len(ind_left)+1
                prd_left = c.prd[1:cut]
                c.ind_right = c.ind[root_pos+1:]
                c.prd_right = c.prd[cut:]
                stacks.append(c)
                stacks.append(Stack(stg=0,prd=prd_left,ind=ind_left))
            else:
                res = None
        elif c.stg==1:
            c.stg=2
            c.tree_list.append(res)
            stacks.append(c)
            stacks.append(Stack(stg=0,prd=c.prd_right,ind=c.ind_right))
        elif c.stg==2:
            c.tree_list.append(res)
            res=c.tree_list
    return res
bubuko.com,布布扣

不规则递归转换为while,留底,布布扣,bubuko.com

不规则递归转换为while,留底

原文:http://www.cnblogs.com/xiangnan/p/3600948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!