我试图创建一个函数path()
,当找到树中的元素时,它将返回一个节点指针数组,其中包含节点的路径。我尝试使用递归,但我不知道出了什么问题,函数路径有一个签名:Node *a
,二叉树,int v
,要查找的值,以及{{ 1}}喜欢作为访问节点的计数器。
这是我的代码:
int *p
答案 0 :(得分:1)
原始代码的主要问题似乎是保持当前深度的位置在所有递归之间共享,并且它只是递增,从不递减。我认为更简洁的方法是将深度作为实际数字传递,而不是作为指向共享深度位置的指针,如下面的代码所示:
ind1 <- ind1[order(rownames(ind1)),]
初始调用应使用0作为深度,例如:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
。
为了避免在初始调用中必须传递0,函数的递归部分可以按如下方式计算:
typedef struct nodo {
int v;
struct nodo *left, *right;
} Nodo;
Nodo **path(Nodo *a, int v, int depth) {
Nodo **r;
if (a == NULL) {
return NULL;
}
if (a->v == v) {
r = malloc((depth+1)*sizeof(Nodo*));
}
else if (a->v < v) {
r = path(a->right, v, depth+1);
}
else {
r = path(a->left, v, depth+1);
}
if (r != NULL) {
r[depth] = a;
}
return r;
}
然后初始调用可以是,例如:p = path(node, value, 0);
。