1
我創建了一個AVL樹,並帶有工作的添加和刪除方法。但是,我需要以可視格式打印出樹。例如,如果平衡樹當前包含1,2,3會是這個樣子:將AVL樹打印到JTextPane:Java
3
2
1
有一個相對簡單的方式做到這一點? (你可以假定在添加或刪除一個值之後,我的樹總是會被適當地平衡。)
我創建了一個AVL樹,並帶有工作的添加和刪除方法。但是,我需要以可視格式打印出樹。例如,如果平衡樹當前包含1,2,3會是這個樣子:將AVL樹打印到JTextPane:Java
3
2
1
有一個相對簡單的方式做到這一點? (你可以假定在添加或刪除一個值之後,我的樹總是會被適當地平衡。)
對於你想要的,有一個簡單的算法,根據你的需求工作不會太差。在一般情況下(即繪製節點),這個問題很難解決 - 如果我沒有完全錯誤地使用三維的NP(但也有一些好的遺傳算法)。
反正我用過類似的東西快速ñ骯髒的調試目的,但我認爲它應該至少給你一個想法如何可以工作(C#代碼,但是這裏的差異歸結爲不同的大寫):
// Start Method
static internal string PrintTree(Node root) {
StringBuilder sb = new StringBuilder();
PrintTree(root, "", sb);
return sb.ToString();
}
static private void PrintTree(Node node, string indent, StringBuilder sb) {
sb.AppendLine(node.ToString());
if (node.LeftChild != null) {
if (node.RightChild == null) {
PrintLastChild(node.LeftChild, indent, sb);
}
else {
PrintNormalChild(node.LeftChild, indent, sb);
PrintLastChild(node.RightChild, indent, sb);
}
}
}
static private void PrintNormalChild(Node node, string indent, StringBuilder sb) {
sb.Append(indent);
sb.Append('├');
sb.Append('─');
PrintTree(node, indent + "│ ", sb);
}
static private void PrintLastChild(Node node, string indent, StringBuilder sb) {
sb.Append(indent);
sb.Append('└');
sb.Append('─');
PrintTree(node, indent + " ", sb);
}
如果你想要一個更典型的樹狀模式,你必須做一些預計算(基本上,因爲你想要樹中間的根節點,你必須知道深度來計算必要的縮排級別和工作線路 - 如果效率不重要,應該不會太差)
哪種方式起作用? – 2011-06-09 20:35:12