По сути, я являюсь кирпичной стеной относительно того, как мне следует сравнивать строки с моей функцией insert
, не принимая во внимание регистр, одновременно вставляя эти же строки в их оригинальный регистр.
Вот моя insert
функция.
TreeNode* Tree::insert(TreeNode* node, string value) {
transform(value.begin(), value.end(), value.begin(), ::tolower);
if (node == nullptr) {
return newTreeNode(value);
}
if (node->data < value) {
node->left = insert(node->left, value);
}
else if(node-> data > value) {
node->right = insert(node->right, value);
}
else {
return node;
}
node->height = 1 + max(height(node->left), height(node->right));
return node;
}
Вот мой заголовочный файл дерева:
struct TreeNode {
public:
TreeNode* left;
TreeNode* right;
string data;
};
class Tree {
public:
TreeNode * newTreeNode(string data);
TreeNode * insert(TreeNode* node, string value);
void lexographicPrint(TreeNode* root);
};
newTreeNode Funciton:
TreeNode* AvlTree::newTreeNode(string value) {
TreeNode* treeNode = new TreeNode();
treeNode->data = value;
treeNode->left = nullptr;
treeNode->right= nullptr;
treeNode->height = 1;
return treeNode;
}
Функция печати:
void AvlTree::lexographicPrint(TreeNode* root) {
if (root != nullptr) {
lexographicPrint(root->right);
cout << root->data << " ";
lexographicPrint(root->left);
}
}
В настоящее время это работает так, как я хочу, за исключением того факта, что дерево содержит все значения в нижнем регистре, очевидно из-за функции transform
. Я попытался использовать holdValue
, вот так:
string holdValue;
if (isupper(value[0]) {
holdValue = value;
}
в верхней части моей функции, заменив все insert
вызовы holdValue
. Меня смущает, почему это меняет порядок моего дерева, когда все еще производятся сравнения с value
. Я ожидал, что это сработает, но это не так. Я еще не нашел решение с помощью поиска Google.