木の最大幅を計算する方法を理解しようとしています。典型的なリーフ/ノード構造を使用する代わりに、DBからのデータに基づいています。特定の「ノード」(Person)のすべての子を見つけて、ピアラインの最大幅を決定します。
1
/ \
2 3
/ | \ \
4 5 6 7
/ \
8 9
したがって、上のツリーの最大値は4です。従来の左/右アプローチを使用しておらず、子の数が2を超える可能性があるため、これをどのように実行しますか?
カップルのもの:
- これは宿題ではありません
- 私が以下に持っているコードはおよそ3200の最大幅を生成します(私が手元にある例のために計算した最大は22です)
これが今の私のコードです:
private int calculateWidth(def org, int h) {
def allContacts = Contact.findAllByOrganization(org)
List<String> headNodes = findHighestNode(org.id, allContacts )
Contact contact = Contact.get(Long.parseLong(headNodes.get(0)))
Person parent = new Person(contact.id, contact.fullName)
int maxWidth = 0;
int width;
int heightOfChart = h;
int i;
for(i = 1; i <= heightOfChart; i++)
{
width = getWidth(parent, i);
if(width > maxWidth)
maxWidth = width;
}
System.out.println("The max width is = " + maxWidth)
return ((NODE_HEIGHT + NODE_OFFSET) * (maxWidth))
}
private int getWidth(Person parent, int level)
{
List<Person> allChildren = getChildren(parent)
if(allChildren.size() == 0)
return 0;
if(level == 1)
return 1;
else if (level > 1) {
int count = 0
for(Person child : allChildren) {
count = count + getWidth(parent, level-1)
}
return count
}
}