Мне нужно добавить элемент в двоичное дерево, учитывая только элемент, который будет добавлен.
Вот код, который мне дали:
void BinaryTree::add(Data * data) {
if (root == NULL) {
root = new BinaryTreeNode(data);
}
else {
root->add(data);
}
}
где root
- закрытая переменная BinaryTree
, определенная как BinaryTreeNode
.
Мне нужно реализовать метод:
void BinaryTreeNode::add(Data * data);
, где BinaryTreeNode
:
class BinaryTreeNode {
public:
Data * nodeData;
BinaryTreeNode * left;
BinaryTreeNode * right;
/**
* Constructor
*/
BinaryTreeNode(
Data * data,
BinaryTreeNode * left = NULL,
BinaryTreeNode *right = NULL
)
: nodeData(data), left(left), right(right)
{ }
// ...
Я хочу сделать это рекурсивно, но я не уверен, как, когда вы только передали данные, которые будут добавлены.
Моя идея, которая не работает:
void BinaryTreeNode::add(Data * newData) {
BinaryTreeNode * temp = this;
if (temp == NULL) {
temp->nodeData = newData;
} else {
if (newData->compareTo(nodeData) < 0) {
temp->left->add(newData);
} else {
temp->right->add(newData);
}
}
}