[英]Question about adding a node to a binary search tree
我正在用它的所有方法編寫一個二叉搜索樹,並且我已經遇到了 add 方法,但是有一行讓我很困惑。
到目前為止,這是我所擁有的方法:
// 6) Methods: add
public boolean add(int newData) {
if (!treeContains(newData)) return false;
else {
add(root, newData);
nodeCount++;
return true;
}
}
public Node add(Node node, int newData) {
if (node == null) {
node = new Node(newData, null, null); // QUESTION
}
if (newData > node.data) {
add(node.rightChild, newData);
}
else { // else if newData is less or equal to node data
add(node.leftChild, newData);
}
return node;
}
在我寫“// QUESTION”的地方,我知道如果我們到達那里,我們基本上已經站在某個節點的 node.leftChild 或 node.rightChild 中,所以當我們創建一個節點時(在 // QUESTION 中)它只是自動彈出那里? 這有點令人困惑,因為感覺我應該指定新節點去那里就像使用類似的東西:
node.leftChild == node; // (or node.rightChild)
如果有人對此有很好的看法,我將不勝感激。 謝謝!
您傳遞給添加方法恕我直言的節點絕不應該是 null。 在調用此方法之前,您應該處理 null 案例。
我想你需要這樣的東西:
public Node add(Node node, int newData) {
if (newData == node.data) {
// ??? Not sure what do you need here, but it's there already.
return node;
}
if (newData > node.data) {
if (node.rightChild == null) {
node.rightChild = new Node(newData, null, null);
return node.rightChild;
} else {
return add(node.rightChild, newData);
}
} else {
if (node.leftChild == null) {
node.leftChild = new Node(newData, null, null);
return node.leftChild;
} else {
return add(node.leftChild, newData);
}
}
}
順便提一句。 不確定這條線是否正確:
if (!treeContains(newData)) return false;
如果節點已經存在, add() 方法不應該返回 false 嗎? 如果它不存在,則添加它? 您確定在 IF 中需要否定嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.