所以我正在写一个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?什么更受欢迎?
谢谢!
答案 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;
}
当使用指向left
或right
但不是两者都是空指针的节点的指针调用时,这将尝试取消引用nullpointer。
所以,逻辑首先是不合适的。
您可能会想到“或”与“和”等等。
检查有效参数,
提示:您可以使用免费的AStyle程序来修复缩进。许多编辑器也提供自动格式化。