无法从内部类转换为类

时间:2018-02-09 21:36:53

标签: java class binary-tree nodes inner-classes

我有一个包含内部类Node的BinaryTree类。 我想做的是能够通过调用 tree.insert(node)在我的BinaryTree 中插入一些节点即可。但是,为了保持干净和一致,我不想在Node内部类中创建 insert() 方法。所以我尝试了下面的代码,但是我有一个错误:无法从BinaryTree.Node转换为BinaryTree

我该怎么办?

BinaryTree类

public class BinaryTree {

    Node root = null;

    private class Node {
        int value;
        Node left;
        Node right;


    }

    public BinaryTree(int v) {
        root.value = v;
        root.left = null;
        root.right = null;
    }

    public void insert(Node n) {
                                      /* Error */
        if(n.value > root.value)    ((BinaryTree) root.right).insert(n);
    }

}

主要课程

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        String[] str = sc.nextLine().split(" ");
        BinaryTree tree;

        for(int i = 0; i < str.length-1; i++) {
            int val = Integer.parseInt(str[i]);
            //tree.insert(node);
        }

    }

}

谢谢,

2 个答案:

答案 0 :(得分:2)

您不需要在function ShowPreview(input) { if (input.files && input.files[0]) { var ImageDir = new FileReader(); ImageDir.onload = function(e) { //Jquery //$('#impPrev').attr('src', e.target.result); var image = document.getElementyId("impPrev"); image.src = e.target.result; } ImageDir.readAsDataURL(input.files[0]); } } 方法中进行类型转换。它应该是这样的:

insert

答案 1 :(得分:0)

要在树中插入节点,您需要定义插入位置,因此插入方法应类似于:

//insert a new node right to a node. not null safe 
public void insert(Node newNode, Node rightTo) {                                    
    newNode.right = rightTo.right;
    newNode.left = rightTo;
    rightTo.right = newNode;
}

不需要施法。
要查找可以使用的rightTo节点:

//get the last node which has a value lower than `value` 
//may return null 
public Node getNodeWithValueLowerThan(int value) {
    if(root == null) return null;
    return getNodeWithValueLowerThan(root, value);
}

//recursive method. null safe 
private Node getNodeWithValueLowerThan(Node node, int value) {
    if(node == null) return null; 
    if(node.value > value) return node.left; //return previous node. may be null
    return getNodeWithValueLowerThan(node.right, value);
}

要将节点作为最后一个节点插入,您可以使用:

//insert a new node as last 
public void insertLastNode(Node newNode) {

    Node lastNode = getTail();
    if(lastNode == null) {//empty tree 
        root = newNode;
        return;
    }
    newNode.left  = lastNode;
    lastNode.right = newNode;
}

其中getTail类似于:

//find last node 
private Node getTail() {

    if(root == null) return null;
    return getTail(root);
}

//recursive method to find last node. not null safe 
private Node getTail(Node node) {

    if(node.right == null) return node;
    return getTail(node.right);
}

注意:代码未经过测试,请仔细调试。