我必须为BST编写一些方法,但是我有一些问题,请允许我解释一下。
我有以下结构:
struct node {
struct node *lChild;
struct node *rChild;
int value;
};
和
struct tree {
struct node *root;
};
以及以下功能:
struct tree* constructNewTree()
{
struct tree *T=malloc(sizeof(struct tree));
T->root=NULL;
return T;
}
和
struct node* constructNewNode(int i)
{
struct node *N=malloc(sizeof(struct node));
N->value=i;
N->lChild=NULL;
N->rChild=NULL;
return N;
}
在我的主目录中,我必须称呼它为:
int main()
{
struct tree *T;
T=constructNewTree();
insertKey(5,T);
insertKey(2,T);
insertKey(9,T);
return 0;
}
我要做的是使用递归创建函数insertKey(int i,struct tree * T)。
我想做类似的事情
void insertKey(int i, struct tree *T)
{
if (T->root==NULL) {
T->root=constructNewNode(i);
return;
}
else {
if (i<=T->root->value) {
T->root->lChild=constructNewNode(i);
else if (i>T->root->value) {
T->root->rChild=constructNewNode(i);
}
}
}
但这还不是很远,使用递归将允许我再次调用insertKey,但似乎无法以相同的方式使用节点和树。
有谁知道我能在不改变给定结构的情况下做到这一点?
非常感谢你。
最佳答案
您的insertKey将Tree作为其参数。树仅是指向最上层的指针。
我建议您做的是编写一个insertKey函数,该函数以Node为参数。同样在此功能中,您必须检查左侧/右侧子级上是否还有另一棵树。
当前,无论存在什么节点,您都只是构造一个新节点。这将覆盖以前的所有插入。