# 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))
全部评论
相关推荐
点赞 评论 收藏
分享
2025-12-31 14:19
门头沟学院 产品经理
哈利波特不吃辣椒:因为实习你记住不是正职,本来就是双方可以随时毁约的,所以实习记住别投入过多感情,份内事情做好就行,开了就开了怕什么,不是转正的实习都无所谓 点赞 评论 收藏
分享
2025-12-28 16:03
哈尔滨工业大学 机械设计/制造 搞机墨镜猫:科研和竞赛全写成项目经历,另外你项目涉及到的技术栈太杂了,应该对不同岗位强调写不同的技术栈,寒假应该不太好找短期,长期明年3,4月好找很多
点赞 评论 收藏
分享