代码已编译但未显示结果。 我已经使用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();
}
}
答案 0 :(得分:0)
您是否尝试创建有序二叉树?我假设你是,但如果是这种情况,那么insertIntoBinaryTree
中显然缺少的东西是被添加的值(data
)与树的当前节点的值之间的任何比较(temp.getData()
)。如果新值小于当前节点的值,则要向左移动;如果值更大,则向右移动。 (您可以选择它们是否相同。)
您的代码第一次调用insertIntoBinaryTree
时,它会将新节点添加为两者根的左右成员,因为逻辑只检查两者是否为null。现在你有一个格式错误的树,因为左边和右边的成员都引用了同一个节点,事情从那里走下坡路。
我将从根和一个额外的节点开始,看看你是否能以这种方式工作,然后从那里继续。
我以前从未见过使用队列打印二叉树,但我认为它有效。通常人们使用递归。但是你绝对不需要一个队列来将数据插入到二叉树中。由于您只向左或向右(从不两者),因此队列将只有一个项目,可以用变量替换。