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的内部类。
经过数小时的运行和尝试其他事情,我无法弄清楚我在做什么错。
从您显示的代码来看,我的钱在这里的错误上:
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方法外的引用。您可以在方法内部修改引用的数据,但不能修改引用本身。
Node r
t.root
r