小编典典

为什么在此方法的二叉树插入方法中,根总是为空

java

IAM尝试为BST类实现递归插入节点方法

 public void insertNode(Node r, Node n)
{
    if(r == null)
    {
        System.out.println("r=n"+ n.data);
        r = n;
    }
    else
    {
        System.out.println("r=! null finding place in tree for "+ n.data);
        if(n.data <= r.data)
        {
            if(r.left == null)
                r.left = n;
            else
                insertNode(r.left, n);
        }
        else
        {
            if(r.right == null)
                r.right = n;
            else
                insertNode(r.right, n);
        }
    }
}

我试图像这样调用此方法:

  int[] arrTree = {34, 2, 56, 12, 44, 39, 56, 1};
    BT t = new BT();
    for (int i = 0; i < arrTree.length; i++)
    {
        //System.out.println("Tree Root = "+ t.getRoot());
        BT.Node n =  t.new Node(arrTree[i]);
        t.insertNode(t.root, n);
    }

但是我总是得到以下输出:

 r=n34
 r=n2
 r=n56
 r=n12
 r=n44
 r=n39
 r=n56
 r=n1

Node是BT的内部类。

经过数小时的运行和尝试其他事情,我无法弄清楚我在做什么错。


阅读 284

收藏
2020-11-30

共1个答案

小编典典

从您显示的代码来看,我的钱在这里的错误上:

public void insertNode(Node r, Node n)
{
    if(r == null)
    {
        System.out.println("r=n"+ n.data);
        r = n; //you overwrite the value of r but never use it
    }

Node r实际上是对所引用对象的单独引用t.root,因此用r另一个值替换不会更改t.root方法外的引用。您可以在方法内部修改引用的数据,但不能修改引用本身。

2020-11-30