BST搜索方法未返回预期结果

时间:2017-05-07 15:27:20

标签: c# binary-search-tree nodes

我一直在研究BST搜索方法,该方法返回一个布尔值,指示被搜索的值是否存在于树中,这段代码中有什么问题?然而,在返回true之后,控制再次转到:else if block.Can有人告诉我我做错了什么?

帮助将受到高度赞赏。谢谢!

public class Node
{

    public int Value { get; set; }

    public Node Left { get; set; }

    public Node Right { get; set; }

    public Node(int value, Node left, Node right)
    {
        Value = value;
        Left = left;
        Right = right;
    }
}

public class BinarySearchTree
{        
    public static bool Search(Node root, int value)
    {

        if (root!=null)
        {
            if (root.Value == value)
            {                    
                return true;
            }
            else if (root.Value < value)
            {
                Search(root.Right, value);
            }
            else
            {
                Search(root.Left, value);
            }

        }            
        return false;            
    }

    public static void Main(string[] args)
    {
        Node n1 = new Node(1, null, null);
        Node n3 = new Node(4, null, null);
        Node n2 = new Node(2, n1, n3);
        bool flag = Search(n2, 4);
        //flag should be true  
        Console.WriteLine("************* " + flag);
        Console.ReadKey();
    }
}

1 个答案:

答案 0 :(得分:1)

您需要返回每次调用方法的结果。目前,当控件进入else/ifelse块时,您忽略了从该方法返回的结果。

此外,您不需要布尔标志只使用条件if (root != null)

public static bool Search(Node root, int value)
{
       if (root != null)
       {
           if (root.Value == value)
               return true;
           else if (root.Value < value)
               return Search(root.Right, value);
           else
               return Search(root.Left, value);
       }
       return false;
}