我正在尝试创建一个支持泛型的二叉搜索树。在插入树的根之后,我正在努力插入节点,很可能是我的插入逻辑错了。但我看不出怎么样。
我的问题是,我的插入逻辑有什么问题,因为我无法在根目录后插入任何节点。
这是我的插入功能
public Node<T> insert(Node<T> node, T data) {
if (node == null)
{ System.out.println("1");
return new Node<T>(data);
}
if (node.getData().compareTo(data) < 0) {
node = new Node<T>(data, insert(node.getLeft(), data),node.getRight());
System.out.println("2");
node.setLeft(insert(node.getLeft(), data));
} else if (node.getData().compareTo(data) > 0) {
System.out.println("3");
node = new Node<T>(data, node.getLeft(), insert(node.getRight(), data));
node.setRight(insert(node.getRight(), data));
}
// After insert the new node, check and rebalance the current node if
// necessary.
switch (balanceNumber(node)) {
case 1:
node = rotateLeft(node);
break;
case -1:
node = rotateRight(node);
break;
default:
return node;
}
return node;
}
这就是我恭维它的地方
public void actionPerformed(ActionEvent e){
double x = Double.parseDouble(txtXCoord.getText());
double y = Double.parseDouble(txtYCoord.getText());
double m = Double.parseDouble(txtMass.getText());
String name = txtInput.getText();
switch(e.getActionCommand()){
case "add":
try {
tree.insert( drawPanel.tree.getRoot(), new Body(x,y,m,name));
drawPanel.setTree(tree);
//drawPanel.paint(getGraphics());
drawPanel.setVisible(true);
tree.PrintTree();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
break;
我应该提一下,我有一个打印树的功能。
答案 0 :(得分:0)
删除以下两行后,您的代码将起作用:
node = new Node<T>(data, insert(node.getLeft(), data),node.getRight());
node = new Node<T>(data, node.getLeft(), insert(node.getRight(), data));
您还需要处理node.getData().compareTo(data) == 0
时的案例。在这种情况下,您将更新节点的实际数据。