# 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))
## 题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 <=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))
全部评论
相关推荐
11-03 14:26
武汉设计工程学院 运营 点赞 评论 收藏
分享

