Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java二叉树中实现泛型顺序遍历?_Java_Binary Tree_Binary Search Tree - Fatal编程技术网

如何在java二叉树中实现泛型顺序遍历?

如何在java二叉树中实现泛型顺序遍历?,java,binary-tree,binary-search-tree,Java,Binary Tree,Binary Search Tree,如何为我的二叉树类创建顺序遍历。我已经看过并尝试过其他的例子,但似乎找不到对我有用的东西 以下是迄今为止我对顺序遍历方法的了解: public void inOrder(TreeNode<T> root) { if(root != null) { inOrder(root.left()); //Visit the node by Printing the node data System.out.printf("%d ",

如何为我的二叉树类创建顺序遍历。我已经看过并尝试过其他的例子,但似乎找不到对我有用的东西

以下是迄今为止我对顺序遍历方法的了解:

public void inOrder(TreeNode<T> root) {
    if(root !=  null) {
        inOrder(root.left());
        //Visit the node by Printing the node data  
        System.out.printf("%d ",root.value());
        inOrder(root.right());
    }
}

public static void main(String[] args) {
    BinaryTree<Integer> tree = new BinaryTree<Integer>();
    tree.insert(1);
    tree.insert(2);
    tree.insert(3);
    tree.insert(4);
    tree.insert(5);

    inOrder(tree.root);
}
但我似乎在说BinaryTree类型中的inOrderTreeNode方法不适用于参数BTree时出错了

以下是我的课程: 二叉树类

三烯类

二叉树接口


您的问题是,在对inOrder函数的递归调用中,您传入的是BTree对象,而不是预期的TreeNode对象:

public void inOrder(TreeNode<T> root) {
    if(root !=  null) {
        inOrder(root.left()); //Passing in a BTree<T> object instead of TreeNode<T> 
        System.out.printf("%d ",root.value());
        inOrder(root.right()); //Passing in a BTree<T> object instead of TreeNode<T>
    }
}

您应该决定将存储在TreeNode对象中的左/右值也作为类型TreeNode使用,或者将访问左/右值的结果强制转换到inOrder函数中的TreeNode对象。

那么到底是什么问题呢?我需要创建一个方法,以便遍历树。我所尝试的似乎不起作用。错误消息是类型BinaryTree中的inOrderTreeNode方法不适用于参数BTree。。。请仔细阅读本文,并检查inoder方法的签名以及您试图作为参数传递的内容。
public class TreeNode<T extends Comparable<? super T>> {
    T value;
    BTree<T> left, right;

    public TreeNode(T value) {
        this.value = value;
        left = new BinaryTree<T>();
        right = new BinaryTree<T>();
    }

    public T value() {
        return value;
    }

    public BTree<T> left() {
        return left;
    }

    public BTree<T> right() {
        return right;
    }
}
public interface BTree<T extends Comparable<? super T>> {
    public void insert(T value);

    public T value();

    public BTree<T> left();

    public BTree<T> right();

}
public void inOrder(TreeNode<T> root) {
    if(root !=  null) {
        inOrder(root.left()); //Passing in a BTree<T> object instead of TreeNode<T> 
        System.out.printf("%d ",root.value());
        inOrder(root.right()); //Passing in a BTree<T> object instead of TreeNode<T>
    }
}