第六题地址:https://fun.coolshell.cn/tree.html
题目的意思是,为了了解下面这串东西加密了什么,你得找到这颗树的最深路径。
根据二叉树的定义,给出中序遍历和后序遍历,可以得知整棵树的完整结构。
用代码解决吧,还是JavaScript。
// 这棵树貌似没有重复节点,难度下降很多
// 1、根据后序遍历特性可知,根在最后一个元素
// 2、根据中序遍历特性可知,根前面打印的元素一定在左子树,根后面打印的元素一定在右子树
// 反复通过1和2推断,就能得到整棵树的结构
var inOrder = "TbHVh3ogPWFLuAfGrm1xJ7we0iQYnZ8Kvqk9y5CNBD24UlcpIEMaj6SROXsdzt";
var postOrder = "TVHo3hPgbFfAumr7Jxew1YQi0ZnGLKy9kqvNDBC54clU28EIRS6jdsXOaMpWtz";
function search(arr, target) {
for (var i = 0; i < arr.length; ++i) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
function handle(inOrderStr, postOrderStr) {
if (!inOrderStr) {
return null;
}
var postOrderPosition = postOrderStr.length - 1;
var val = postOrderStr[postOrderPosition];
var inOrderPosition = search(inOrderStr, val);
var inOrderLeftStr = inOrderStr.substring(0, inOrderPosition);
var inOrderRightStr = inOrderStr.substring(inOrderPosition + 1, len);
// 左右节点数量是相同的(只是顺序不同)
var postOrderLeftStr = postOrderStr.substr(0, inOrderLeftStr.length);
var postOrderRightStr = postOrderStr.substr(inOrderLeftStr.length, inOrderRightStr.length);
var node = {
val: val,
left: handle(inOrderLeftStr, postOrderLeftStr),
right: handle(inOrderRightStr, postOrderRightStr)
};
return node;
}
var root = handle(inOrder, postOrder);
// 得到树结构
console.log(root);
// 找到最深的路径
var deepest = 0;
var deepestPath = "";
function findPath(node, str, deep) {
str += node.val;
++deep;
if (node.left == null && node.right == null) {
// console.log(deep + ":" + str);
if (deepest < deep) {
deepest = deep;
deepestPath = str;
}
return;
}
if (node.left != null) {
findPath(node.left, str, deep);
}
if (node.right != null) {
findPath(node.right, str, deep);
}
}
findPath(root, "", 0);
console.log(deepestPath);
得到密码是:zWp8LGn01wxJ7。
接下来就是解码了。
echo U2FsdGVkX1+gxunKbemS2193vhGGQ1Y8pc5gPegMAcg= | openssl enc -aes-128-cbc -a -d -pass pass:zWp8LGn01wxJ7
走起……呵呵,报错了。
之后尝试了JavaScript、Java、Python等,都不好使。
最后还是打算找一个老一点的OpenSSL,网页地址:http://wiki.overbyte.eu/wiki/index.php/ICS_Download
下载地址:http://wiki.overbyte.eu/arch/openssl-1.0.2u-win32.zip
好了,得到第7题地址:https://fun.coolshell.cn/nqueens.html
收获:开源意味着自由,也是随性,版本兼容问题随处可见(可能是解决啥大BUG了吧)。