当前位置: 首页 > 知识库问答 >
问题:

二叉搜索树(BST)-遍历搜索

杨选
2023-03-14

编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。

例如,对于以下树:

  • N1(值:1,左:null,右:null)
  • n2(值:2,左:n1,右:n3)
  • N3(值:3,左:null,右:null)

对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。

函数应该返回1,然而,它返回0或者根本不返回。

#include <stdlib.h>
#include <stdio.h>

typedef struct Node
{
    int value;
    struct Node *left;
    struct Node *right;
} Node;

int contains(const Node *root, int value)
{
    if (root->value == value)
    return 1;
    else if (value < root->value)
    {
        if (root->left == NULL)
        return 0;
        return contains(root->left, value);
    }
    else if (value > root->value)
    {
        if (root->right == NULL)
        return 0;
        return contains(root->left, value);
    }

}

int main()
{
    Node n1 = {.value=1, .left=NULL, .right=NULL};
    Node n3 = {.value=3, .left=NULL, .right=NULL};
    Node n2 = {.value=2, .left=&n1, .right=&n3};
    printf("%d", contains(&n2, 3));
}

共有1个答案

艾浩广
2023-03-14

value>root->value时,您不返回root->right,value吗?

else if (value < root->value)
        {
            if (root->left == NULL)
            return 0;
            return contains(root->left, value);
        }
        else if (value > root->value)
        {
            if (root->right == NULL)
            return 0;
            return contains(root->right, value); //You need to go to the right branch 
        }
 类似资料:
  • 这里有问题 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 编写一个函数,根据使用的时间有效地检查给定的二叉搜索树是否包含给定的值。

  • 对于二叉搜索树:7为根,1为左子,10为右子。 我试过调试这个函数,看看它是如何工作的,但我似乎不能理解一件事。函数检查并看到1的左子项和右子项都为空后,它就移动到节点10,然后检查右子项是否为空。有人能解释一下递归模式,以及为什么方法在初始检查节点1后没有退出。

  • //执行顺序遍历的递归方法

  • 二叉树 : 闲话少说,直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>BST</title> </head> <body> <script> //结点 function Node(data,left,right){ this.data=data; t

  • NowCoder 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。 例如,下图是后序遍历序列 1,3,2 所对应的二叉搜索树。 解题思路 // java public boolean VerifySquenceOfBST(int[] sequence) { if (sequence == null || sequence.l