2016-06-26 25 views
0

所以我只寫了在二叉樹(NOT 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條件)向樹添加新級別,以便您構建的「樹」高度不平衡到左側。這不是一個真正的「樹」,它更像是一個奇怪的鏈表。另外,由於您不保留任何特定的序列,因此不能比簡單的無序列表進行搜索更好。