区分递归基本情况和异常

时间:2014-11-25 06:52:49

标签: c++ exception data-structures

所以我正在写一个avl树类的高度函数:

int avlTree::height(avlNode* tree) {
if (!tree) {
    throw invalidInput;
}
if (!tree->left && !tree->right) {
    return 0;
}
return max(height(tree->right), height(tree->left)) + 1;
}

但感觉有些事情是错的,我想以这样的方式实现它,在开始时树将被检查为NULL,如果是,则应该返回0。但是,我失去了检查树是否是一个无效指针的可能性。或者它是否正常,即使它是一个无效指针它也会返回0?什么更受欢迎?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是我写这个答案时所呈现的代码:

int avlTree::height(avlNode* tree) {
if (!tree) {
    throw invalidInput;
}
if (!tree->left && !tree->right) {
    return 0;
}
return max(height(tree->right), height(tree->left)) + 1;
}

当使用指向leftright但不是两者都是空指针的节点的指针调用时,这将尝试取消引用nullpointer。

所以,逻辑首先是不合适的。

您可能会想到“或”与“和”等等。


检查有效参数,

  • 写一个非检查版本,
  • 写一个调用第一个的检查版本。

提示:您可以使用免费的AStyle程序来修复缩进。许多编辑器也提供自动格式化。