在任意树C中查找节点

时间:2015-05-06 11:03:24

标签: c tree

我想使用函数从任意树中找到节点并返回该节点

这是我的结构:

    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;
}

但它没有用。

我需要修改或更正才能找到该节点?

或者,如果你能给我另一个建议,我会感激不尽!

1 个答案:

答案 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);
    }
}

此外:你应该总是使用括号。省略它们只会导致错误并且没有任何优势。