2016-06-26 3 views
0

Так что я просто написал код для вставки узлов в двоичное дерево (НЕ BST).Насколько эффективна память - реализация двоичного дерева в Java?

Я заметил, что каждый раз, когда рекурсивная вставка возвращает «узел», она назначается начальному узлу.

Означает ли это, что ссылка на память корня этого дерева изменится по завершении каждой вставки?

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

В add единственный раз, когда вы меняете node, если дерево в этот момент не пусто, так что ответ не для первой вставки, за исключением.

Однако обратите внимание, что вы добавляете новый уровень к дереву только слева (первое условие if), поэтому «дерево», которое вы создаете, сильно неуравновешено слева. На самом деле это не «дерево», это скорее странный связанный список. Кроме того, поскольку вы не поддерживаете какую-либо конкретную последовательность, она не может быть лучше, чем простой неупорядоченный список для поиска.