空のノード a で始まるハフマン二分木があります。
A は左ノードと右ノードを指し、これらは左ノードと右ノードも指します。このツリーを作成した後、各ノードの親ノードを再帰的に設定することは可能ですか?
これは私が考えているコードです:
public Node setParents(Node n)
{
if(n.getZero() == null && n.getOne() == null)
{
return n;
}
Node a = setParents(n.getZero()); // Zero being left
a.setParent(n);
Node b = setParents(n.getOne()); // One being right.
b.setParent(n);
}
これは、値が最小から最大にソートされた優先キューを使用して、現在ツリーを作成している方法です。
public Node createTree(PriorityQueue<Node> pq)
{
while(pq.size() > 1)
{
Node n = new Node();
Node a = pq.poll();
if(pq.size() > 0)
{
Node b = pq.poll();
n = new Node(a.getFrequency() + b.getFrequency());
n.setZero(a);
a.setWhich(0);
a.setParent(n);
n.setOne(b);
b.setWhich(1);
b.setParent(n);
}
else
{
n = new Node(a.getFrequency());
n.setZero(a);
a.setWhich(0);
n.setParent(n);
n.setOne(null);
}
pq.add(n);
}
Node n = pq.poll();
n.setParent(null);
setParents(n.getZero());
setParents(n.getOne());
return n;
}
各ノードに親があることを確認する必要があるだけですが、ここからどこから始めればよいかわかりません..何か助けはありますか?