Я только начинаю с деревьев и пишу функцию, которая пересекает двоичное дерево и посещает каждый узел. Я вызываю функцию doSomething (TreeNode * thisNode) для каждого узла в дереве. Я хочу убедиться, что то, что у меня есть, правильно и что я на правильном пути? Спасибо!
void MyTree::Traverse(TreeNode *rt)
{
If(rt != NULL)
Traverse(rt -> left);
doSomething (rt);
Traverse(rt -> right);
}
Почти, но не совсем.
if
оператор в C ++ не пишется с большой буквы, и вы должны добавить скобки следующим образом:
void MyTree::Traverse(TreeNode *rt)
{
if(rt != NULL)
{
Traverse(rt -> left);
doSomething (rt);
Traverse(rt -> right);
}
}
Если вы не добавите скобки, заявления doSomething(rt)
а также Traverse(rt->right)
будет вызываться независимо от того, действителен узел или нет!
Это всегда хорошая идея для отладки вашей программы с некоторыми соответствующими тестами. Как вы думаете, что произойдет в вашем коде, если rt не NULL? Это должно помочь вам понять, правильно ли вы это делаете.