无法显示二叉树

时间:2017-03-12 15:54:09

标签: java data-structures binary-tree

代码已编译但未显示结果。   我已经使用insertIntoBinaryTree()方法将节点插入二叉树,并使用方法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();




}


}

1 个答案:

答案 0 :(得分:0)

您是否尝试创建有序二叉树?我假设你是,但如果是这种情况,那么insertIntoBinaryTree中显然缺少的东西是被添加的值(data)与树的当前节点的值之间的任何比较(temp.getData())。如果新值小于当前节点的值,则要向左移动;如果值更大,则向右移动。 (您可以选择它们是否相同。)

您的代码第一次调用insertIntoBinaryTree时,它会将新节点添加为两者根的左右成员,因为逻辑只检查两者是否为null。现在你有一个格式错误的树,因为左边和右边的成员都引用了同一个节点,事情从那里走下坡路。

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

我以前从未见过使用队列打印二叉树,但我认为它有效。通常人们使用递归。但是你绝对不需要一个队列来将数据插入到二叉树中。由于您只向左或向右(从不两者),因此队列将只有一个项目,可以用变量替换。