安恒CRYPTO,LeftOrRight题解

题目描述:

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()

然后求出来就可以了;结果忘记了…

发布了40 篇原创文章 · 获赞 18 · 访问量 7570

猜你喜欢

转载自blog.csdn.net/zmx2473162621/article/details/103963553