CoolShell-第6题

第六题地址: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了吧)。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值