# P1030 [NOIP 2001 普及组] 求先序排列

## 题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 <=8。

## 输入格式

共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

## 输出格式

共一行一个字符串,表示一棵二叉树的先序。

##输入输出样例#1

###输入#1

```
BADC
BDCA
```

###输出#1

```
ABCD
```

## 说明/提示

**【题目来源】**

NOIP 2001 普及组第三题

处理树,像是在打史莱姆,史莱姆会分裂成两个小史莱姆,就像是左子树,和右子树,写这道题用了栈的思路。
求先序排列,总是要先求左子树,所以可以让右子树先入栈,左子树再入栈,对栈顶的左子树处理,又有新的左右子树,
通过循环操作,处理完整棵树。
代码如下:
n=input()
m=input()
list1=[]
list2=[n]

def check(list2):
    max_num=0
    if len(list2[len(list2)-1])==1:
        list1.append(list2[len(list2)-1])
        del list2[len(list2)-1]
    else:
        for item in list2[len(list2)-1]:
            if m.index(item)>max_num:
                max_num=m.index(item)
        
        num=max_num
        list1.append(m[num])
        str=list2 [len(list2)-1]
        del list2 [len(list2)-1]
        num1=str.index(m[num])
        if str[num1+1::]!='':
            list2.append(str[num1+1::])
        if str[0:num1]!='':
            list2.append(str[0:num1])
    
    
while(list2!=[]):
    check(list2)
print(''.join(list1))
全部评论

相关推荐

不愿透露姓名的神秘牛友
12-10 15:21
华为-媒体院 算法 n*16 硕士985
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务