-1

これが私の関数です。ツリーのルートノードとツリー内にある文字をシードします。検索対象のアルファベットは正常に返されますが、要素へのパスは返されません。私は少し立ち往生しています

public Node traversingTree(Node root,String 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 に答える