Java 无法显示二叉树

Java 无法显示二叉树,java,data-structures,binary-tree,Java,Data Structures,Binary Tree,正在编译代码,但未显示结果。 我使用方法insertintobarytree()将节点插入到二叉树中,并使用方法printLevelOrder()按级别显示二叉树。但它没有显示任何内容。请检查代码 public class BinaryTree { public class TreeNode{ TreeNode left; TreeNode right; int data; TreeNode(int data) { this.lef

正在编译代码,但未显示结果。 我使用方法insertintobarytree()将节点插入到二叉树中,并使用方法printLevelOrder()按级别显示二叉树。但它没有显示任何内容。请检查代码

public class BinaryTree {


public class TreeNode{

    TreeNode left;
    TreeNode right;
    int data;

    TreeNode(int data)
    {
        this.left=null;
        this.right=null;
        this.data=data;
    }

    public int getData()
    {
        return data;
    }


    public void setData(int data)
    {

        this.data=data;

    }


    public void setLeft(TreeNode left)
    {
        this.left=left;

    }

    public void setRight(TreeNode right)
    {
        this.right=right;
    }


    public TreeNode getLeft()
    {
        return left;
    }
    public TreeNode getRight()
    {
        return right;
    }


}

TreeNode root;

BinaryTree()
{
    root=null;

}


public void insertRoot(int data)
{
    TreeNode node= new TreeNode(data);
    root=node;
}

public void insertIntoBinaryTree(int data)
{
    TreeNode node= new TreeNode(data);

    Queue<TreeNode> q = new LinkedList<TreeNode>();

    TreeNode temp;
    q.offer(root);

    while(!q.isEmpty())
    {
        temp=q.poll();


        if(temp!=null)
        {

            if(temp.getLeft()!=null)
            {
                q.offer(temp.getLeft());
            }

            else
            {
                temp.setLeft(node);

            }

            if(temp.getRight()!=null)
            {
                q.offer(temp.getRight());
            }

            else
            {
                temp.setRight(node);

            }

        }
    }

}



public void printLevelOrder()
{

    TreeNode cur;

    Queue<TreeNode> ql= new LinkedList<TreeNode>();

    ql.offer(root);

    while(!ql.isEmpty())
    {

        cur= ql.poll();

        System.out.println(cur.getData()+ " ");

        if(cur.getLeft()!=null)
            ql.offer(cur.getLeft());

        if(cur.getRight()!=null)
        {
            ql.offer(cur.getRight());
        }


    }

}       
 public static void main(String args[])
    {

        BinaryTree bt = new BinaryTree();
        bt.insertRoot(1);
        bt.insertIntoBinaryTree(2);
        bt.insertIntoBinaryTree(3);
        bt.insertIntoBinaryTree(4);
        bt.insertIntoBinaryTree(5);
        bt.insertIntoBinaryTree(6);
        bt.printLevelOrder();




}


}
公共类二进制树{
公共级树节点{
左树突;
特雷诺德右翼;
int数据;
树节点(整数数据)
{
this.left=null;
this.right=null;
这个。数据=数据;
}
公共int getData()
{
返回数据;
}
公共无效设置数据(整数数据)
{
这个。数据=数据;
}
公共无效设置左(TreeNode左)
{
这个。左=左;
}
公共无效设置权(TreeNode right)
{
这个。右=右;
}
公共TreeNode getLeft()
{
左转;
}
公共TreeNode getRight()
{
返还权;
}
}
树根;
二叉树()
{
root=null;
}
公共void insertRoot(int数据)
{
TreeNode=新的TreeNode(数据);
根=节点;
}
公共void insertintobarytree(int数据)
{
TreeNode=新的TreeNode(数据);
队列q=新的LinkedList();
树节点温度;
q、 报价(根);
而(!q.isEmpty())
{
temp=q.poll();
如果(温度!=null)
{
if(temp.getLeft()!=null)
{
q、 报价(temp.getLeft());
}
其他的
{
温度设置左(节点);
}
if(temp.getRight()!=null)
{
q、 提供(临时getRight());
}
其他的
{
温度设置权限(节点);
}
}
}
}
公共无效printLevelOrder()
{
树状体;
队列ql=新的LinkedList();
ql.offer(root);
而(!ql.isEmpty())
{
cur=ql.poll();
System.out.println(cur.getData()+“”);
if(cur.getLeft()!=null)
ql.offer(cur.getLeft());
if(cur.getRight()!=null)
{
ql.offer(cur.getRight());
}
}
}       
公共静态void main(字符串参数[])
{
BinaryTree bt=新的BinaryTree();
bt.insertRoot(1);
bt.insertintobarytree(2);
bt.insertintobarytree(3);
bt.insertintobarytree(4);
bt.insertintobarytree(5);
bt.insertinobinarytree(6);
bt.printLevelOrder();
}
}

您正在尝试创建有序二叉树吗?我假设您是,但如果是这样,那么
insertintobarytree
中明显缺少的是正在添加的值(
data
)与树的当前节点上的值(
temp.getData()
)之间的任何类型的比较。如果新值小于当前节点上的值,则要向左,如果值大于,则要向右。(如果两者相同,则可以选择其中之一。)

当代码第一次调用insertintobarytree时,它将添加新节点作为根的左成员和右成员,因为逻辑只检查这两个成员是否为null。现在您有了一个格式错误的树,因为左成员和右成员都引用同一个节点,然后事情就从那里开始了

我将从根和一个额外的节点开始,看看是否可以让它以这种方式工作,然后从那里继续


我以前从未见过使用队列打印二叉树,但我认为它是可行的。通常人们使用递归。但是,将数据插入到二叉树中肯定不需要队列。由于您只能向左或向右(决不能同时向左或向右),队列将只有一个项目,并且可以用变量替换。

打印树需要调用什么?你有主方法还是测试用例?是的,我添加了主方法。请检查错误时间以(学习)使用调试器