Java 无法显示二叉树
正在编译代码,但未显示结果。 我使用方法insertintobarytree()将节点插入到二叉树中,并使用方法printLevelOrder()按级别显示二叉树。但它没有显示任何内容。请检查代码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
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。现在您有了一个格式错误的树,因为左成员和右成员都引用同一个节点,然后事情就从那里开始了
我将从根和一个额外的节点开始,看看是否可以让它以这种方式工作,然后从那里继续
我以前从未见过使用队列打印二叉树,但我认为它是可行的。通常人们使用递归。但是,将数据插入到二叉树中肯定不需要队列。由于您只能向左或向右(决不能同时向左或向右),队列将只有一个项目,并且可以用变量替换。打印树需要调用什么?你有主方法还是测试用例?是的,我添加了主方法。请检查错误时间以(学习)使用调试器