我想使用函数从任意树中找到节点并返回该节点
这是我的结构:
typedef struct binary_tree {
int index;
struct binary_tree * left;
struct binary_tree * right;
} binary_tree;
我使用的功能是
binary_tree * search (binary_tree * tree, int index) {
binary_tree * found = NULL;
if(tree == NULL)
return NULL;
if(tree->index == index)
return tree;
found = search(tree->left, index);
if (found) {
return found;
}
found = search(tree->right, index);
if (found) {
return found;
}
return NULL;
}
但它没有用。
我需要修改或更正才能找到该节点?
或者,如果你能给我另一个建议,我会感激不尽!
答案 0 :(得分:0)
通常你使用一个键(=你的match (n)-[:RELATIONSHIP]-(NODE) where NODE.name=~ "*.(?i)something.*" Return n.name
)对元素进行排序并更快地找到它们。
您的代码目前搜索树中index
的每个元素,尽管也可以使用O(n)
。
正确的解决方案取决于您在树中存储元素的方式(如何订购元素)。 以下示例期望左节点索引小于右节点索引。
O(log n)
如果(无论出于何种原因)您的树没有排序,您需要在任何地方搜索:
binary_tree * search (binary_tree * arbore, int index) {
if(arbore == NULL){
return NULL;
}
if(arbore->index == index){
return arbore;
}
if(arbore->index < index){
return search (arbore->left, index);
}else{
return search (arbore->right, index);
}
}
此外:你应该总是使用括号。省略它们只会导致错误并且没有任何优势。