所以我只是编写了在二叉树(NOT BST)中插入节点的代码。
我注意到每次递归插入返回'node'时,它都会被分配给初始节点。
这是否意味着,在每次插入完成时,此树的根的内存引用会发生变化?
public void add(int data)
{
root=add(root,data);
}
public static BinaryNode add(BinaryNode node, int data) {
if(node==null)
{
node=new BinaryNode(data);
}
else {
///IF not 1st element, flow enters this part
if(node.left==null && node.right==null)
{
node.left=add(node.right,data);
}
else if (node.right == null) {
node.right=add(node.right, data);
} else {
node.left=add(node.left, data);
}
}
return node;
}
答案 0 :(得分:0)
在add
范围内,您更改node
的唯一时间是,如果该点的树为空,那么除了第一个插入外,答案为否。
但是,请注意,您只在左侧(第一个if
条件)向树添加一个新级别,因此"树"你建立的左边高度不平衡。这不是一个真正的树#34,它更像是一个奇怪的链表。此外,由于您没有维护任何特定的序列,因此它不会比简单的无序搜索列表更好。