Память и указатели в BST - PullRequest
0 голосов
/ 14 ноября 2011

В бинарном дереве поиска, которое принимает простой объект ..... при создании методов getter и setter для left, right и parent.Есть опасения по поводу того, что происходит, когда установлен родительский узел.Код ниже ...

Код:

 public void setParent(Person parent) {
  parent = new Person( parent.getName(), parent.getWeight());

Пример кода, который вдохновил код:

 public void setParent(Node parent) {
  this.parent = parent;
 }

1 Ответ

1 голос
/ 14 ноября 2011

Вы создаете то, что по сути является клоном родительского объекта. Это отличается от простого сохранения указателя на родительский объект.

Очевидно, что вы будете занимать больше места в памяти, дублируя родительский объект. Что еще более важно, вы не дублируете ссылки родителей. Поэтому, если вы попытаетесь пройти по дереву, перейти к родителю узла, а затем попытаться посетить его других потомков, вы нарисуете множество нулевых указателей.

this.parent является ссылкой на указатель parent текущего объекта.

Это на самом деле не означает, что this является родителем. Фактически, this.parent используется, чтобы отличить локальный указатель parent от входящего параметра parent.

class Person{
    Person parent; // <---- this is the "this.parent" attribute, and is initially undefined
    public void setParent(Person parent){ // <---- the "Person parent" on this line is an incoming parameter
        this.parent = parent; //<---- "this.parent" refers to the attribute, and "parent" refers to the parameter
    }
}
...