Я решаю проблему с определением минимального пути к листу в дереве. Я использую 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?
}
};