【发布时间】:2013-07-24 08:14:36
【问题描述】:
我有一个 BST 作为;
8
/ \
4 12
\
6
/
6
我有以下代码来计算重复计数,这里应该是 1(6 有重复);
struct Node
{
int data;
Node *left, *right;
};
void inorder(Node *root, Node *previous, int count)
{
if(root != NULL)
{
if(root != previous && root->data == previous->data)
count++;
previous = root;
inorder(root->left, previous, count);
cout<<root->data<<" ";
inorder(root->right, previous, count);
}
}
我必须这样做使用恒定的额外空间。我知道它远不及,但我的想法是跟踪前一个节点并检查重复并在最后返回数数。但是在执行 顺序 BST 遍历时,我无法返回 integer 值。 除此之外,还有更好的方法来计算 BST 中的重复项。我发起;
inorder(a, a, 0);
【问题讨论】:
-
大概将遍历结果存储在向量中,如果不需要就地做的话,在向量中查找重复项?
-
@taocp 我刚刚编辑了这个问题。感谢您的提示!
-
您是否不计算多次重复(即,如果您的树中有 三个
6值,是否打算将其视为“具有重复的单个值”还是应该将其视为两个“重复”(实际上 三个,这是一个更难解决的问题)? -
为什么您的 BST 允许重复?
-
@Ali 我编辑了您的问题以使用恒定的额外空间,这是您想要的正确术语
标签: c++ algorithm recursion binary-search-tree traversal