Java 关于将节点添加到二叉搜索树的问题
我正在用它的所有方法编写一个二叉搜索树,我遇到了add方法,但是有一行让我很困惑 以下是目前为止我对该方法的了解:Java 关于将节点添加到二叉搜索树的问题,java,data-structures,tree,binary-search-tree,Java,Data Structures,Tree,Binary Search Tree,我正在用它的所有方法编写一个二叉搜索树,我遇到了add方法,但是有一行让我很困惑 以下是目前为止我对该方法的了解: // 6) Methods: add public boolean add(int newData) { if (!treeContains(newData)) return false; else { add(root, newData); nodeCount++; return true;
// 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;
}
在我写“//问题”的地方,我知道如果我们到了那里,我们基本上已经站在某个节点的node.leftChild或node.righchild中,所以当我们创建一个节点(在//问题中)时,它会自动弹出吗?这有点让人困惑,因为我觉得我应该指定新节点到那里,就像使用以下东西一样:
node.leftChild == node; // (or node.rightChild)
如果有人对此有好的看法,我会非常感激。谢谢 您传递给add method IMHO的节点不应为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中需要否定吗