Java 将二叉搜索树转换为XML
我正在尝试将二元搜索树转换为XML,以使用处理编程语言绘制它。我面临的问题是关闭标签位置不正确。 这是生成XML的Java代码Java 将二叉搜索树转换为XML,java,xml,processing,binary-search-tree,data-visualization,Java,Xml,Processing,Binary Search Tree,Data Visualization,我正在尝试将二元搜索树转换为XML,以使用处理编程语言绘制它。我面临的问题是关闭标签位置不正确。 这是生成XML的Java代码 public void toXML() { Stack<String> tags = new Stack<>(); PrintWriter pw = null; try { pw = new PrintWriter("tree.xml"); } catch (IOException e) {
public void toXML() {
Stack<String> tags = new Stack<>();
PrintWriter pw = null;
try {
pw = new PrintWriter("tree.xml");
} catch (IOException e) {
e.printStackTrace();
}
pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
toXMLHelper(this.root, pw, tags, "root");
while(!tags.isEmpty())
pw.println(tags.pop().toString());
pw.flush();
pw.close();
}
private void toXMLHelper(BSTNode<T> p, PrintWriter pw, Stack<String> tags, String place) {
if (p != null) {
addTag(p, pw, tags, place);
if(p.left == null && p.right == null)
pw.println(tags.pop().toString());
toXMLHelper(p.left, pw, tags, "left");
toXMLHelper(p.right, pw, tags, "Right");
}
}
private void addTag(BSTNode<T> p, PrintWriter pw, Stack<String> tags, String place) {
pw.println("<node place=\"" + place + "\">" + p.el.toString() );
tags.push("</node>");
}
public void toXML(){
堆栈标记=新堆栈();
PrintWriter pw=null;
试一试{
pw=新的PrintWriter(“tree.xml”);
}捕获(IOE异常){
e、 printStackTrace();
}
pw.println(“”);
toXMLHelper(this.root,pw,tags,“root”);
而(!tags.isEmpty())
println(tags.pop().toString());
pw.flush();
关闭();
}
私有void toXMLHelper(BSTP节点、PrintWriter pw、堆栈标记、字符串位置){
如果(p!=null){
添加标签(p、pw、标签、位置);
if(p.left==null&&p.right==null)
println(tags.pop().toString());
toXMLHelper(p.left,pw,标签,“left”);
toXMLHelper(p.right,pw,tags,“right”);
}
}
私有void addTag(BSTP节点、PrintWriter pw、堆栈标记、字符串位置){
pw.println(“+p.el.toString());
标签。按(“”);
}
下面是生成的XML
<?xml version="1.0" encoding="UTF-8"?>
<node place="root">8
<node place="left">4
<node place="left">2
</node>
<node place="Right">7
</node>
<node place="Right">9
</node>
</node>
</node>
8.
4.
2.
7.
9
其中一个底部结束标记应位于节点7结束标记的下方。我怎样才能把它修好呢
我尝试使用XML编码器,但它生成了太多不必要的标记。我相信您试图用错误的方法来处理这个问题。 更简单的方法是在每个元素上递归,而不是将它们的标记保存在堆栈中 好了:
public PrintWriter bstToXML() {
try (PrintWriter pw = new PrintWriter("tree.xml")) {
pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
bstToXMLHelper(this.root, pw, "root");
return pw;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private void bstToXMLHelper(BSTNode node, PrintWriter pw, String place) {
if(node == null) {
return;
}
pw.println("<node place=\"" + place + "\">" + node.el.toString());
if(node.left != null){
bstToXMLHelper(node.left, pw, "left");
}
if(node.right != null) {
bstToXMLHelper(node.right, pw, "right");
}
pw.println("</node>");
}
publicprintwriter bstoxml(){
try(PrintWriter pw=newprintWriter(“tree.xml”)){
pw.println(“”);
bstToXMLHelper(this.root,pw,“root”);
返回pw;
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
私有void bstToXMLHelper(BSTNode节点、PrintWriter pw、字符串位置){
if(node==null){
返回;
}
println(“+node.el.toString());
if(node.left!=null){
bstToXMLHelper(node.left,pw,“left”);
}
if(node.right!=null){
bstToXMLHelper(node.right,pw,“right”);
}
pw.println(“”);
}
希望能有帮助