题目描述:
Left?Middle?No,I want right!(flag is right?!)
做题过程:
首先打开文件,发现是一张错误的图片,
错误的话一般情况就是头文件或者尾部出错,再或者就是本身就不是一个图片,那么我们拉到winhex查看一下,发现:
头文件有点怪异,在网上搜一下jpg的头文件;这个博客总结的不错:https://blog.csdn.net/xiangshangbashaonian/article/details/80156865
JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9
那么发现,文件头有一部分文件,所以提出来;然后发现尾部也有一部分多余的,提取出来,然后把多余的删去,保存!再次打开,发现变成了:
这个好像是个树????好丑…分叉…二叉????
那就看一下我们提取出来的数字,十六进制,变成字符串,然后发现这两个字符串
字母相同…顺序不同,再分析一下题目,left,mid都不要,只要right,然后这个地方又是一个树,二叉树1
前序遍历,中序遍历,后序遍历,
前尝试把文件尾部的字符串交上去,不对.
那就是第一个是前序遍历,第二个是中序,求后序遍历:
代码来源于网上
def get_after_deep(pre, mid, a):#已知前中,求后,a就是后序
if len(pre) == 1:
a.append(pre[0])
return
if len(pre) == 0:
return
root = pre[0]
root_index = mid.index(root)
get_after_deep(pre[1:root_index+1], mid[:root_index], a)
get_after_deep(pre[root_index+1:], mid[root_index+1:], a)
a.append(root)
return a
def get_hou():
pre=input("请依次输入前序遍历、中序遍历的结果,以换行分割:\n")
mid=input()
pre_list=list(pre)
mid_list=list(mid)
a=[]
res_list=get_after_deep(pre,mid,a)
res="".join(res_list)
print("后序遍历为:",res)
get_hou()
然后求出来就可以了;结果忘记了…