Опит за четене в низ за поставяне в двоично дърво

Опитвам се да взема низ и след това да го манипулирам в двоично дърво. Единственият проблем е, че ми е трудно да чета в низовете. Знам, че в c++ всеки отделен знак е char, а не низ, но не мога да разбера как да рекурсирам през низа, за да получа всеки char (надявам се, че има смисъл). Опитвам се да вмъкна първия символ в моя конструктор като корен и след това да отида в моята функция за изграждане на дърво, която след това ще продължи надолу по реда, като го попълва. Някой има ли идеи?


class PrefixTree
{
    private:
        struct TreeNode
        {
            char character;
            TreeNode * left;
            TreeNode * right;
        };
        TreeNode* root = new TreeNode;
    public:

    PrefixTree(string value)
    {
        if (value == '*')
        {
            root->character = value;

        }
        buildTree(root, value);
    }
    TreeNode* buildTree(TreeNode* node, string value)
    {
        TreeNode* currentNode = new TreeNode;
        currentNode = node;

        if (currentNode->character == '*' && currentNode->left == NULL)
        {
            currentNode->left = buildTree(currentNode->right,value);
            return currentNode;
        }
        else if (currentNode->character == '*' && currentNode->right == NULL)
        {
            currentNode->right = buildTree(currentNode->right,value);
            return currentNode;
        }
        else
        {
            return currentNode;
        }
    }      

и как извиквам конструктора основно:

  PrefixTree n("*ab");

person Jen    schedule 17.02.2014    source източник
comment
„TreeNode* currentNode = нов TreeNode; currentNode = възел;' в началото на buildTree трябва да е грешно - първо разпределяте TreeNode и след това презаписвате указателя с node, като по този начин изхвърляте новоразпределената памет   -  person Tim Bergel    schedule 18.02.2014


Отговори (1)


Можете да използвате оператора [] върху низове, за да получите отделни знаци.

Например:

string a = "hello";
cout << a[0];

Ще отпечата "h", първия знак на a.

Бих предложил във вашата рекурсивна функция да получите знак с оператора [], след което да използвате функцията .substr() за рекурсия на част от низа.

person bobroxsox    schedule 17.02.2014