【问题标题】:not able to display binary tree无法显示二叉树
【发布时间】:2017-03-12 15:54:09
【问题描述】:

代码正在编译但不显示结果。 我使用方法 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();




}


}

【问题讨论】:

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

标签: java data-structures binary-tree


【解决方案1】:

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

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

我会从根和一个额外的节点开始,看看你是否可以让它工作,然后从那里继续。

我以前从未见过使用队列来打印二叉树,但我想它可以工作。通常人们使用递归。但是您绝对不需要队列来将数据插入二叉树。由于您只能向左或向右(从不同时),队列将永远只有一个项目,并且可以用变量替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多