Java 如何修改二进制搜索树的遍历?

Java 如何修改二进制搜索树的遍历?,java,algorithm,binary-tree,binary-search-tree,Java,Algorithm,Binary Tree,Binary Search Tree,我成功地建立了二叉树,但我不能正确地遍历它。这是我的二叉树程序和遍历方法 import java.util.*; public class BinaryTreeUtube { Node root; public void addNode(int key) { Node newNode = new Node(key); if (root == null) { root = newNode; }

我成功地建立了二叉树,但我不能正确地遍历它。这是我的二叉树程序和遍历方法

import java.util.*;
public class BinaryTreeUtube {

    Node root;
    public void addNode(int key) {
        Node newNode = new Node(key);

        if (root == null) {
            root = newNode;

        }
        else {
            Node focusNode = root; 
            Node parent;
            while (true) {
                parent = focusNode;
                if (key < focusNode.key) {
                    focusNode = focusNode.leftChild;
                    if (focusNode == null) {
                        parent.leftChild = newNode;
                        return;
                    }
                } else {
                    focusNode = focusNode.rightChild;
                    if (focusNode == null) {
                        parent.rightChild = newNode;
                        return; 
                    }
                }
            }
        }
    }

    public void inOrderTraverseTree(Node focusNode) {

        if (focusNode != null) {


            inOrderTraverseTree(focusNode.leftChild);
            System.out.print(focusNode + ",");
            inOrderTraverseTree(focusNode.rightChild);

        }


    }




    public Node findNode(int key) {

        Node focusNode = root;

        while(focusNode.key != key) {
            if (key < focusNode.key) {
                focusNode = focusNode.leftChild;
            }
            else {
                focusNode = focusNode.rightChild;
            }

            if (focusNode == null) {
                return null;
            }
        }
        return focusNode;
    }

    public static void main(String[] args){


        BinaryTreeUtube theTree = new BinaryTreeUtube();
        Scanner sc = new Scanner(System.in);
        int times = sc.nextInt();
        for (int t = 0; t < times; t++) {
            theTree.addNode(sc.nextInt());
        }




        theTree.inOrderTraverseTree(theTree.root);


    }

}



class Node {

    int key;

    Node leftChild;
    Node rightChild;

    Node(int key) {
        this.key = key;
    }

    public String toString() {
        if (leftChild == null) {
            return "(-," + Integer.toString(key) + ",-)";
        }
        return Integer.toString(key);
    }
}
它回来了

(-,2,-),3,(-,4,-),5,(-,8,-), 
而不是

(-,2,-),3,((-,4,-),5,(-,8,-)),
我尝试了很多方法来修改代码,让它做我想要的,但都失败了。。。
如何使程序能够检测节点之间的层次结构?我应该做什么修改?谢谢

您可以在
节点中更改为
toString
方法:

public String toString() {
    String l = Objects.toString(leftChild, "-");
    String r = Objects.toString(rightChild, "-");
    return "(" + l + "," + key + "," + r + ")";
}

然后您可以调用
System.out.println(tree.root)
查看结构。

您可以在
节点中更改为
toString
方法:

public String toString() {
    String l = Objects.toString(leftChild, "-");
    String r = Objects.toString(rightChild, "-");
    return "(" + l + "," + key + "," + r + ")";
}
然后您可以调用
System.out.println(tree.root)
查看结构