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
不规则递归转换为while,留底,布布扣,bubuko.com
原文:http://www.cnblogs.com/xiangnan/p/3600948.html