【发布时间】:2019-05-31 06:11:06
【问题描述】:
鉴于允许重复作为单独顶点的 BST,我如何找到最高的子树以使其没有重复。
这是一个想法: (1) 检查根值是否出现在其右子树中(以这种方式插入:left
我不知道如何在遍历时存储这些信息。我找到了用于查找所有使用哈希映射的 BST 重复子树的程序,但如果可能的话,我宁愿避免使用哈希映射,因为我的课程中还没有它们。
<!-- language: lang-c -->
typedef struct vertex {
int data;
struct vertex *left;
struct vertex *right;
} vertex, *pvertex;
// Utility functions
int Height(pvertex t){
if (t == NULL)
return 0;
if (Height(t->left) > Height(t->right))
return Height(t->left) + 1;
else
return Height(t->right) + 1;
}
int DoesItOccur(pvertex t, int k){
if(!t)
return 0;
if(t->data==k)
return 1;
if(t->data<k){
return DoesItOccur(t->left,k);
}
}
// My function
pvertex MaxSeeked(pvertex t){
if(!t)
return NULL;
if(DoesItOccur(t->right,t->data)==0)
return t;
else if{
if(t->left && t->right){
if(Height(MaxSeeked(t->left))>Height(MaxSeeked(t->right)))
return t->left;
else
return t->right;
}
}
else if{
......
}
}
【问题讨论】:
-
这个问题似乎太简单了,所以我肯定遗漏了一些东西,但是如果根在其 left 子树中重复怎么办?然后,树确实至少有一个重复项,但您可能无法通过仅在其右子树中查找根来检测到这一点。
-
@JohnBollinger 我这样插入:left
标签: c binary-search-tree