首页 > 解决方案 > 插入隐含泛型的二叉搜索树

问题描述

我正在尝试创建一个隐含泛型的二叉搜索树。在插入树的根之后,我正在努力插入节点,很可能是我的插入逻辑错误。但我不知道怎么做。

我的问题是,我的插入逻辑有什么问题,因为我无法在根之后插入任何节点。

这是我的插入功能

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;

我应该提到我有一个打印树的功能。

标签: javabinary-tree

解决方案


删除以下两行后,您的代码将起作用: 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. 在这种情况下,您将更新节点的实际数据。


推荐阅读