this method makes more sense to be in HuffNode
This commit is contained in:
parent
a2c7846134
commit
8e5f856c09
2 changed files with 39 additions and 33 deletions
|
@ -122,7 +122,7 @@ public class HuffNode {
|
|||
* search down the tree, for the node,
|
||||
* at address of String bits, on HuffNode trie
|
||||
*/
|
||||
public HuffNode findByBits(HuffNode trie, String bits) {
|
||||
private HuffNode findByBits(HuffNode trie, String bits) {
|
||||
if (bits.length() == 0) {
|
||||
return trie;
|
||||
}
|
||||
|
@ -138,6 +138,40 @@ public class HuffNode {
|
|||
return null;
|
||||
}
|
||||
|
||||
public String getBitPath(Object need) {
|
||||
return getBitPath(this, need);
|
||||
}
|
||||
|
||||
/**
|
||||
* get a String of the bits, that map to Object need
|
||||
*/
|
||||
private String getBitPath(HuffNode trie, Object need) {
|
||||
HuffNode left = trie.getLeft();
|
||||
HuffNode right = trie.getRight();
|
||||
if (left != null && left.getValue() != null) {
|
||||
if (need.equals(left.getValue())) {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
if (right != null && right.getValue() != null) {
|
||||
if (need.equals(right.getValue())) {
|
||||
return "1";
|
||||
}
|
||||
}
|
||||
if (left != null) {
|
||||
String leftPath = getBitPath(left, need);
|
||||
if (leftPath.length() > 0) {
|
||||
return "0" + leftPath;
|
||||
}
|
||||
}
|
||||
if (right != null) {
|
||||
String rightPath = getBitPath(right, need);
|
||||
if (rightPath.length() > 0) {
|
||||
return "1" + rightPath;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
/**
|
||||
* pretty information
|
||||
*/
|
||||
|
|
|
@ -655,13 +655,13 @@ public class PathTree {
|
|||
baos.write(nodeSize);
|
||||
}
|
||||
StringBuffer bits = new StringBuffer();
|
||||
String endNodeLocation = findHuffPath(stringParent, HuffNode.END_NODE);
|
||||
String endNodeLocationBitPath = stringParent.getBitPath(HuffNode.END_NODE);
|
||||
for (PathNode pn : pathNodes) {
|
||||
for (NodePair np : pn.getChildren()) {
|
||||
bits.append(findHuffPath(stringParent, np.getName()));
|
||||
bits.append(findHuffPath(pathNodeParent, np.getConnection()));
|
||||
bits.append(stringParent.getBitPath(np.getName()));
|
||||
bits.append(pathNodeParent.getBitPath(np.getConnection()));
|
||||
}
|
||||
bits.append(endNodeLocation);
|
||||
bits.append(endNodeLocationBitPath);
|
||||
while (bits.length() >= 8) {
|
||||
int next = 0;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
|
@ -724,34 +724,6 @@ public class PathTree {
|
|||
return result;
|
||||
}
|
||||
|
||||
private String findHuffPath(HuffNode trie, Object need) {
|
||||
HuffNode left = trie.getLeft();
|
||||
HuffNode right = trie.getRight();
|
||||
if (left != null && left.getValue() != null) {
|
||||
if (need.equals(left.getValue())) {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
if (right != null && right.getValue() != null) {
|
||||
if (need.equals(right.getValue())) {
|
||||
return "1";
|
||||
}
|
||||
}
|
||||
if (left != null) {
|
||||
String leftPath = findHuffPath(left, need);
|
||||
if (leftPath.length() > 0) {
|
||||
return "0" + leftPath;
|
||||
}
|
||||
}
|
||||
if (right != null) {
|
||||
String rightPath = findHuffPath(right, need);
|
||||
if (rightPath.length() > 0) {
|
||||
return "1" + rightPath;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* given a tokenized URL path, build out the PathNode parent,
|
||||
* and append endMarker to terminal nodes.
|
||||
|
|
Loading…
Reference in a new issue