-1

这是我的函数,我用我的树的根节点和树内的一个字符来播种它。它成功地将要搜索的字母返回给我,但它没有给我元素的路径。我有点卡住了,任何帮助都会得到帮助

公共节点遍历树(节点根,字符串 charToFind){

    Node tempRoot = root;

    if (root != null){

        if (charToFind.equals(root.getAlphabet()))
        {
            //Another Point of consideration
            System.out.print(root.getAlphabet());
            System.out.println(": "+pathCodes);
            pathCodes.clear();
            return root;
        }
        Node result;

        if ((result = traversingTree(root.leftChild, charToFind)) != null){

            pathCodes.add("0");
            return result;

        }else
            pathCodes.add("1");
            return traversingTree(root.rightChild, charToFind); 
        }

        }
    pathCodes.clear();

     return null;

}

4

1 回答 1

1

您并没有确切地说出您得到了什么,但是查看您的代码,您的右手递归是在继续向下查找适当的节点之前添加“1”。但是,您清除叶节点处的代码,这将在添加所有 '1' 后发生。所以我希望你的代码只包含'0',因为'0'是在递归附加的。

此外,我怀疑当您在返回树的途中添加字符时代码将回到前面。

在重新考虑你的递归时,我建议不要像这样使用霍夫曼树。搜索代码效率很低——我建议遍历树一次,构建一个字母+代码表,然后简单地对其进行索引。

优选地,仅使用树来计算代码长度,并使用规范编码生成代码。

于 2013-03-18T12:56:06.480 回答