Не понимаю, зачем мне возвращение на последних строках - PullRequest
0 голосов
/ 19 апреля 2019

Я решаю проблему с определением минимального пути к листу в дереве. Я использую BFS в C ++ с очередью, в которой хранится узел и текущая глубина.

Я пересекаю дерево в BFS, добавляя узлы в свою очередь по мере продвижения. Как только я достигаю своего первого листа, я выхожу из цикла.

Я не понимаю, почему мне нужно добавить возврат 0; строка в конце программы (комментируется код).

Если я удаляю эту строку, я получаю сообщение о том, что функция дошла до конца без возврата.

В каком случае он мне понадобится?

class TreeDepth{
    TreeNode* node;
    int depth;
    public:
    TreeDepth(int depth, TreeNode* node): depth(depth), node(node) {}
    TreeNode* getNode() {return node;}
    int getDepth() {return depth;}
};
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(!root)
            return 0;
        else
        {
            std::queue<TreeDepth> depthQ;
            TreeDepth nodeDepth(1,root);
            depthQ.push(nodeDepth);
            while(!depthQ.empty())
            {
                TreeDepth currentNode = depthQ.front();
                depthQ.pop();
                if(!currentNode.getNode()->left && !currentNode.getNode()->right)
                    return currentNode.getDepth();
                else
                {
                    if(currentNode.getNode()->left)
                    {
                        TreeDepth leftNodeDepth(currentNode.getDepth() + 1, currentNode.getNode()->left);
                        depthQ.push(leftNodeDepth);
                    }
                    if(currentNode.getNode()->right)
                    {
                        TreeDepth rightNodeDepth(currentNode.getDepth() + 1, currentNode.getNode()->right);
                        depthQ.push(rightNodeDepth);
                    }
                }
            }
        }
    return 0; // why do I need this line?
    }
};

1 Ответ

3 голосов
/ 19 апреля 2019

Поскольку у вас есть пути в функции, которые выходят, но не возвращают значение.Например, если глубина Q пуста, ваш код завершит работу, ничего не возвращая (кроме этого последнего «возврата 0»).И вы объявили свою функцию для возврата int.Таким образом, все пути кода должны возвращать некоторое значение int.

...