[英]Binary Tree graphical representation troubles
因此,我有一个用户定义的二叉树类,希望以图形方式表示。 JTree似乎是这里的最佳选择。 我的课有一个到其当前位置的引用,以使用户更容易遍历并抽象内部Node类。 调用next时,它将遍历并返回Node的值。
在大多数情况下,我已经能够使这些树协同工作,但是当用户添加节点时遇到了一个问题。 我已经设置好了,他们可以添加一个左选择或一个右选择-这与我保存的数据很重要,所以必须采用这种方式-我完全坚持如何做。 目前,我实现它的方式不可撤销地使树不同步,以至于需要退出并重新初始化以重新获得同步。
这是我遇到问题的方法:
一些信息:
-在这里,dTree是我的树类的对象,而gTree是JTree对象(数据树,图形树)
-方法getShortName(String)返回用于表示JTree中当前节点的规范化名称,该名称是从dTree对象推断出来的。
//Adds a new right node to the currently selected node.
public void addNextR()
{
if(!dTree.hasNextR())
{
dTree.addNextChoiceR("Empty Node");
DefaultMutableTreeNode node =
((DefaultMutableTreeNode)gTree.getSelectionPath().getLastPathComponent());
node.add(new DefaultMutableTreeNode(getShortName(dTree.getCurrent())));
expandTree();
}
}
//Adds a new left node to the currently selected node.
public void addNextL()
{
if(!dTree.hasNextL())
{
dTree.addNextChoiceL("Empty Node");
DefaultMutableTreeNode node =
((DefaultMutableTreeNode)gTree.getSelectionPath().getLastPathComponent());
node.add(new DefaultMutableTreeNode(getShortName(dTree.getCurrent())));
expandTree();
}
}
如果有人可以帮助我解决此问题,将不胜感激,我希望我已按照正确的程序进行操作并提供了足够的信息。 抱歉,我只想确保我能解决我的问题。 不过,至少感谢您阅读本文!
为了方便理解和轻松进行更改,我使用了三个类。
import java.io.*;
import java.util.*;
class TreeNode
{
TreeNode left,right;
int data;
TreeNode()
{
data=0;
left=right=null;
}
TreeNode(int n)
{
data=n;
left=right=null;
}
void disp()
{
System.out.println(data+" ");
}
void setLeft(TreeNode n)
{
left=n;
}
void setRight(TreeNode n)
{
right=n;
}
TreeNode getLeft()
{
return left;
}
TreeNode getRight()
{
return right;
}
void setData(int d)
{
data=d;
}
int getData()
{
return data;
}
}
class BinaryTree
{
TreeNode root;
BinaryTree()
{
root=null;
}
void insert(int data)
{
root=insert(root, data);
}
TreeNode insert(TreeNode node, int data)
{
if(node==null)
{
node=new TreeNode(data);
}
else
{
if(data<=node.data)
{
node.left=insert(node.left, data);
}
else
{
node.right=insert(node.right, data);
}
}
return(node);
}
void inorder()
{
inorder(root);
System.out.println();
}
void inorder(TreeNode r)
{
if(r!=null)
{
inorder(r.getLeft());
System.out.print(r.getData()+" ");
inorder(r.getRight());
}
}
void preorder()
{
preorder(root);
System.out.println();
}
void preorder(TreeNode r)
{
if(r!=null)
{
System.out.print(r.getData()+" ");
preorder(r.getLeft());
preorder(r.getRight());
}
}
void postorder()
{
postorder(root);
System.out.println();
}
void postorder(TreeNode r)
{
if(r!=null)
{
postorder(r.getLeft());
postorder(r.getRight());
System.out.print(r.getData()+" ");
}
}
}
import java.io.*;
import java.util.*;
class btTraversal
{
BinaryTree bt;
void main() throws IOException
{
bt=new BinaryTree();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int val;
char ch=' ';
String clearbuffer;
do
{
System.out.print("Enter a number: ");
val=Integer.parseInt(br.readLine());
bt.insert(val);
System.out.print("Do you wish to enter more values (Y/N).....");
ch=(char)br.read();
clearbuffer=br.readLine();
}while(ch=='y'||ch=='Y');
System.out.println("Postorder traversal of given tree is: ");
bt.postorder();
System.out.println("Preorder traversal of given tree is: ");
bt.preorder();
System.out.println("Inorder traversal of given tree is: ");
bt.inorder();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.