我試圖將一般樹(具有一個或多個孩子的樹)轉換爲二叉樹。我的一般樹由XML文件名「1 .XML」包含:生成二叉樹形式N aire樹 - 遞歸方法不起作用
<A>
<B/>
<C>
<E/>
<F/>
</C>
<D/>
</A>
,所以我可以代表二進制樹是這樣的:
我們這棵樹轉換爲二叉樹我用下面的方法:
A ---- # -------- # ------ #
| | |
B C--#--# D
| |
E F
(#(DIESE)的數量是指給定節點的兄弟的數量) 最右邊的節點是樹的根。
A <---- # <-------- # <------ #
| | |
B C<--#<--# D
| |
E F
更清楚二叉樹是喜歡這幅畫
這樣做,我寫這個代碼:
public static Node NaireTreeToBinaryTree (Node node,Document d)
{
if (isLeaf(node))
{
return node;
}
else
{
List<Element> liste = GetChildren(node);
Node tmp= d.createElement(node.getNodeName());
for (int i=0;i<liste.size();i++)
{
Element root = d.createElement("DIESE");
root.appendChild(tmp);
Element child2 = d.createElement(NaireTreeToBinaryTree(liste.get(i),d).getNodeName());
root.appendChild(child2);
tmp=root;
}
return tmp;
}
}
public static void WritingIntoXML (Node node ,Document d)
{
try{
d.appendChild(node);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(d);
// Output to console for testing
StreamResult result2 = new StreamResult(System.out);
transformer.transform(source, result);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
Node root = GetNodeParent("1.xml"); // Get the node parent
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Node a =NaireTreeToBinaryTree (root, doc);
WritingIntoXML (a ,doc);
}
catch (Exception e)
{
e.printStackTrace();
}
}
即時得到這個結果(IM puting DIESE(中父節點的名稱)而不是#):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<DIESE>
<DIESE>
<DIESE>
<A/>
<B/>
</DIESE>
<DIESE/>
</DIESE>
<D/>
</DIESE>
有樹缺少節點C,E,F所以我不知道爲什麼? 是遞歸梅索德問題NaireTreeToBinaryTree
你可能想用dom替換jdom標記...這不是JDOM相關的問題(不是xml解析的問題...)。 – rolfl