我正在尝试计算二叉搜索树中的节点数,并且想知道最有效的方法是什么。这些是我发现的选项:
在 BST 类中存储 int 计数
将 int children 存储在树的每个节点中,该节点存储其下的子节点数
编写一个统计 BST 中节点数的方法
如果使用选项 3,我写过:
int InOrder {
Node *cur = root;
int count = 0;
Stack *s = null;
bool done = false;
while(!done) {
if(cur != NULL) {
s.push(cur);
cur = cur->left;
}
else {
if(!s.IsEmpty()) {
cur = s.pop();
count++;
cur = cur->right;
}
else {
done = true;
}
}
}
return count;
}
但从外观上看,它似乎会陷入和之间的无限cur = cur->left;
循环cur = cur->right;
那么哪个选项最有效,如果是选项 3,那么这种方法会起作用吗?