我来自 Python 和 Haskell 背景,所以当我必须编写一个函数来计算二叉树中电影的数量时,我是这样做的:
int MovieTree::countMovieNodes(MovieNode* parent)
{
if (parent)
return countMovieNodes(parent->left) + countMovieNodes(parent->right) + 1;
else
return 0;
}
int MovieTree::countMovieNodes()
{ countMovieNodes(root); }
但是,使用类中提供的头文件,我必须这样做:
void MovieTree::countMovieNodes(MovieNode* parent, int* c)
{
(*c)++;
if (parent->left)
countMovieNodes(parent->left, c);
if (parent->right)
countMovieNodes(parent->right, c);
}
int MovieTree::countMovieNodes()
{
if (!root) return 0;
int c=0; countMovieNodes(root, &c); return c;
}
我非常了解前者相对于后者的优势;后者比前者有什么优势?它与堆栈内存使用有关,对吧?