在二叉树中找到节点的故障函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在二叉树中找到节点的故障函数相关的知识,希望对你有一定的参考价值。

此功能出问题。应该找到一个具有相同值phone的节点。我认为尝试查找不存在的节点时会出现问题。

这里是:

bst_node* find_node(bstree* bst, unsigned long phone) { 
    bst_node* x = bst->root;

    if(x == NULL)
        return NULL;
    if(x->phone == phone)
        return bst->root;

    while (x->phone != phone && (x->left != NULL && x->right != NULL) ) {
        if(phone <= x->phone) {
            x = x->left;
        } else {
            x = x->right;
        }
    }
    if (x->phone == phone) {
        return x;
    } else {
        return NULL;
    }          
}
答案

基本上,您的问题出在您的while循环中。请记住,您不能保证每个节点都会有两个孩子,某些节点可能只有一个孩子,而您并不是在探索只有一个孩子的那些节点。我下面要做的是将对左右节点是否存在的检查分离为while循环中的条件语句。这使我们可以探索整个树:)我还在while循环中添加了else语句,因为如果节点没有子节点,那么我们已经完成了探索,节点无法进入树中。

bst_node* find_node(bstree* bst, unsigned long phone) {

    bst_node* x = bst->root;
    if(x == NULL)
        return NULL;
    if(x->phone == phone)
        return bst->root;
    while (x->phone != phone){
        if(phone <= x->phone && x->left != NULL){
             x = x->left;
        }
        else if (phone > x->phone && x->right != NULL){
             x = x->right;
        }
        else {return NULL;}
    return x;

}

以上是关于在二叉树中找到节点的故障函数的主要内容,如果未能解决你的问题,请参考以下文章

在二叉树中找到两个节点最近公共祖先

如果不是树中的所有这些节点,Python会在二叉树中找到两个节点的最低共同祖先

在二叉树中找到两个节点的最近公共祖先

使用递归 DFS 在二叉树中查找节点

在二叉搜索树中找到一个节点的父节点

#yyds干货盘点# 面试必刷TOP101:在二叉树中找到两个节点的最近公共祖先