示例:首先根是空的。
输入数字:50
这将显示“成功!”
插入号码:40
成功插入50左边的子树
插入号码:20
成功插入40左边的子树
插入号码:80
成功插入50右边的子树
你能帮帮我吗?提前谢谢您希望得到积极的回应......这是我的代码:
class Node
{
public int num;
public Node llink;
public Node rlink;
}
public class BinaryTreeOperations
{
//public Node llink=null;
// public Node rlink=null;
private Node temp;
private Node current;
private Node root;
public boolean isEmpty()
{
return root==null;
}
public void insertNum(int n)
{
temp=null;
current=null;
Node newNode = new Node();
newNode.num=n;
newNode.llink=null;
newNode.rlink=null;
if(isEmpty())
{
root=newNode;
System.out.println("Successfully inserted!");
}
else
{
temp=root;
while(temp!=null)
{
current = temp;
root = current;
temp=null;
}
if(n<current.num)
{
current.llink=newNode;
//current.llink=temp;
System.out.println("inserted on the left subtree " +current.num);
}
else
{
newNode.rlink=newNode;
System.out.println("inserted on the right subtree "+current.num );
}
}
}
答案 0 :(得分:2)
你的while循环似乎错了。你真正想要做的是从根开始并遍历树,直到你到达将作为新节点的父节点的节点。下面你没有进行任何遍历或检查以找到新节点的位置。这就是你真正需要做的事情。
while(temp!=null) {
current = temp;
root = current;
temp=null;
}
应该是这样的:
while(parent not found) {
if (new node is smaller than current) {
if (current has left child) {
assign left child to current and loop
} else {
make current the parent of the new node
}
} else {
....
}
}
答案 1 :(得分:0)
else { temp=root; while(temp!=null) { current = temp; root = current; temp=null; }
此循环只会运行一次。可能不是你想要的。 :)
if(n<current.num) { current.llink=newNode; //current.llink=temp; System.out.println("inserted on the left subtree " +current.num); } else { newNode.rlink=newNode; System.out.println("inserted on the right subtree "+current.num ); }
在您分配给current.llink
的另一个分支中,您分配给newNode.rlink
的一个分支。哎呀。 :)
答案 2 :(得分:0)
添加到二叉搜索树的方法似乎不正确。
您需要阅读二进制搜索树以了解如何维护树的结构。
下面是一些显示如何添加到二进制搜索树的代码,但如果树不包含任何数据,我将其定义为空。
public boolean isEmpty() {
return data == null;
}
代码的其余部分非常自我解释,应该可以帮助您弄清楚如何添加到树中以维护顺序。
public boolean add(Comparable target) {
if(isEmpty()) {
setData(target);
this.setLeftTree(new BinarySearchTree());
this.setRightTree(new BinarySearchTree());
return true;
} else {
int comparison = getData().compareTo(target);
if(comparison == 0)
return false;
else {
if(comparison < 0) {
return getRightTree().add(target);
} else {
return getLeftTree().add(target);
}
}
}
}
如果您有任何其他问题,请告诉我。