当前位置: 首页 > 知识库问答 >
问题:

基于dfs的递归树加密方法

花和宜
2023-03-14

这个问题不是为作业做的,尽管它是一个典型的“类似作业”的问题,我试图用不同的方法来解决。

我想写一个方法,它将使用深度优先搜索算法递归地遍历二叉树,以找到字符的匹配。一旦它找到匹配的字符,我希望它返回一个字符串,该字符串使用0和1映射该字符在树中的位置。例如,“001”将指示通过到根节点的左节点、该节点的左节点,然后到该节点的右节点来找到字符。

下面是我目前拥有的代码:

private static String encryptSearch(char c, BinaryNode curNode, String result)
{
    char data = (char) curNode.getData();

    if (data != c)
    {
        if (curNode.hasLeftChild())
        {
            result = result + "0";
            encryptSearch(c, curNode.getLeftChild(), result);
        }
        if (curNode.hasRightChild())
        {
            result = result + "1";
            encryptSearch(c, curNode.getRightChild(), result);  
        }

        result = result.substring(0, result.length()-1);
    }   

    return result;  
} 

该方法最初被发送要搜索的字符、根节点和结果为null。此方法只返回0。我认为我的代码有多个问题,但最大的问题是当搜索到达一个叶节点时,它返回。在返回字符串的同时,我无法想出解决这个问题的方法。我可以很容易地编写一个void方法,将其作为外部变量作用于结果字符串,但我不想为了练习的目的而这样做。感谢任何帮助!

共有1个答案

云和硕
2023-03-14

使用可变的StringBuilder而不是String。此外,应该有一种方法,知道您从左一个(如果有的话)的结果,然后再搜索右一个。所以我建议遵循更改。

private static boolean encryptSearch(char c, BinaryNode curNode, StringBuilder result) {
    char data = curNode.getData();
    if (data != c) {
        boolean found = false;
        if (curNode.hasLeftChild()) {
            found = encryptSearch(c, curNode.getLeftChild(), result);
            if (found) {
                result.insert(0, "0");
                return true;
            }
        }
        if (curNode.hasRightChild()) {
            found = encryptSearch(c, curNode.getRightChild(), result);
            if (found) {
                result.insert(0, "1");
                return true;
            }
        }
        return false; //no result
    }
    return true;
}
 类似资料:
  • 我在深度优先搜索算法实现的递归方法方面遇到了一些麻烦。这是二叉树照片: 该方法在树的右侧(55、89、144)工作得很好,但是当它来到左侧时,它返回nil,即使它输入“是”。那么,代码有什么问题呢?节点是Node类的一个实例,它具有值(整数)并链接到左右子级(Node类的其他实例),如果它没有来自该侧的子级,则为nil。 下面是方法代码:

  • 我正在做运动,我有点困了,需要一些帮助。假设有向图上有以下顶点和边:AB、BC、AD、CD、DC、DE、CE、EB、AE,如下所示 到目前为止,我已经设法通过使用DFS和递归来解决这个问题。我跟踪深度(即距离源有多少边),当深度超过3时,递归函数返回。 我现在想做的是不使用递归来解决它,也就是说,使用堆栈,但我卡住了!如果我使用以下类似的东西(伪代码): 那么我就无法知道每个顶点应该在哪个深度。我

  • 我读了一个算法来寻找二叉树中两个节点之间的距离。 这段代码在二叉树中找到(从根到给定节点的1个距离)。 我不明白的是,“x”有两个值,一个来自左子树,另一个来自右子树,它如何知道返回哪个值 例如,如果树类似于: 然后调用, 那么,在语句“”中,它如何返回正确的x值?

  • 我试图通过自顶向下递归实现二叉树最低公共祖先(LCA)问题的解决方案。 我使用的方法是: 想法:找到在任一子树中有一个所需节点的节点,而另一个所需节点是相反的子树。 以下是确切的实现: 例如: 这将返回树的根作为结果。结果=TreeNode(2)

  • 我试图为我的BST做一个递归加法。public add方法接受一个int参数,private方法接受相同的int和一个节点。这是我目前掌握的代码 我经常得到空指针,也尝试过调试,但我的逻辑中有一些我看不到的缺陷。

  • 本文向大家介绍php实现基于openssl的加密解密方法,包括了php实现基于openssl的加密解密方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现基于openssl的加密解密方法。分享给大家供大家参考,具体如下: 通过openssl加密解密方法 1. openssl加密方法: 2. openssl解密方法: PS:关于加密解密感兴趣的朋友还可以参考本站在线工具: 密码安全