C二叉搜索树前序遍历递归

标签 c binary-search-tree

我正在研究一个函数,该函数在 C 中的二叉搜索树中搜索随函数传入的名称。但是,我坚持如何格式化我的循环,以便当遍历到达没有子节点的最左侧节点时,回避不会简单地结束。遍历必须是预定的(访问我自己,然后是我的左 child ,然后是我的右 child )。

我的查找函数如下:

tnode *bst_find_by_name(tnode *ptr, const char *nom){

    if(ptr != NULL){
        if(strcmp(ptr->name, nom) == 0){
            return ptr;
        }
        if(ptr->left != NULL){
            return bst_find_by_name(ptr->left, nom);
        }
        if(ptr->right != NULL){
            return bst_find_by_name(ptr->right, nom);
        }
    }

    return NULL;


}

如您所见,目前,一旦它到达与传递给函数的字符串不匹配的最左侧节点,它就简单地返回 NULL。如果它在树中找不到匹配项,我必须让它返回 NULL,但同时我不希望它在有机会搜索树中的每个节点之前过早返回 NULL。有什么想法吗?

最佳答案

创建一个保存返回值的临时变量。并检查 bst_find_by_name 是否返回 NULL 以外的内容,如果它返回 NULL,则继续检查树。

类似下面的内容。

tnode *ret = NULL;
if(ptr->left != NULL){
    ret = bst_find_by_name(ptr->left, nom);
}
if(ret == NULL && ptr->right != NULL){
    ret = bst_find_by_name(ptr->right, nom);
}
return ret;

关于C二叉搜索树前序遍历递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600347/

相关文章:

Python:在特殊环境中执行代码对象

c++ - 在 Linux 上调试 C/C++ 运行时库并查看库代码?

java - 二叉树的搜索功能未返回找到的节点

list - 带列表的二叉搜索树

java - 使用java保留二叉搜索树中根的值

c - matlab下建立mex文件

c - 制作 : cannot find makedepend

c - 为什么这个程序给我一个 "segmentation fault"?

C++ 模板 NULL 未声明的标识符

c - 释放了 BST 但仍然出现内存泄漏 C