2016-03-21 169 views
1

我不知道爲什麼我需要再次分配node.left = insert(node.left, data),因爲我已經使用node = new BNode(data)分配了它。BST以Java遞歸實現

private BNode insert(BNode node, int data) { 
    if (node == null) { 
     node = new BNode(data); 
    } 
    else if (node.data < data) { 
     node.left = insert(node.left, data); 
    } 
    else if (node.data > data) { 
     node.right = insert(node.right, data); 
    } 
    return node; 
} 
+0

我不知道粘貼我的代碼的格式。所以我把它粘貼在這裏。 – Jutta

+0

私人B節點插入件(B節點節點,int數據) \t { \t \t如果(節點== NULL) \t \t { \t \t \t節點=新B節點(數據); \t \t} \t \t否則如果(node.data <數據) \t \t { \t \t \t node.left =插入(node.left,數據); \t \t} \t \t否則如果(node.data>數據) \t \t { \t \t \t node.right =插入(node.right,數據); \t \t} \t \t return node; \t \t \t} – Jutta

+0

我真的很抱歉,但花了我一個小時來調整格式。 – Jutta

回答

1

在二叉搜索樹中,您必須將任何新元素放置爲葉子。您的代碼首先檢查我們是否正在查看節點,如果是,則在此處插入我們的數據。否則,我們需要繼續下一個分支,直到我們到達一片葉子。因此,我們在左側或右側分支上調用此函數(取決於節點中的數量和數據)。我們這樣做的方式是通過調用node.left或node.right函數。如果孩子是空的,那麼我們想說現在我們的孩子是我們剛插入的這個新節點。

如果孩子不是一片樹葉,那麼通過返回原來的孩子這個任務將不會做任何事情。它只是說

node = new BNode(data); 

,因此前次這被稱爲將是唯一一個得到它的左或右子更改爲當前新葉做一些事情和所有其他左右的孩子保持他們的方式是。

+0

我明白了。 node = new BNode(data)只是創建一個新的BNode,這與樹無關。所以我必須將這個新節點連接到樹上。 – Jutta

+0

如果這能正確回答你的問題,你能接受答案嗎? –