Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二叉树搜索算法中的NullReferenceException_C#_Algorithm_Search_Binary Tree_Binary Search Tree - Fatal编程技术网

C# 二叉树搜索算法中的NullReferenceException

C# 二叉树搜索算法中的NullReferenceException,c#,algorithm,search,binary-tree,binary-search-tree,C#,Algorithm,Search,Binary Tree,Binary Search Tree,System.NullReferenceException:对象引用未设置为实例 物体的形状 public int find(int值){ 节点curr=根; while(curr!=null){ 如果(当前值==值){ 返回值;//成功 } 如果(当前值值){ curr=curr.rChild; } if(curr.value==null){ 打破 } } 返回0;//没有值 } 我看不出这个二叉树搜索的配置有什么问题您使用的实现没有使用需要考虑的情况是互斥的这一事实。如果命中一个案例,则可

System.NullReferenceException:对象引用未设置为实例 物体的形状

public int find(int值){
节点curr=根;
while(curr!=null){
如果(当前值==值){
返回值;//成功
}
如果(当前值<值){
curr=curr.lChild;
}
如果(当前值>值){
curr=curr.rChild;
}
if(curr.value==null){
打破
}
}
返回0;//没有值
}

我看不出这个二叉树搜索的配置有什么问题

您使用的实现没有使用需要考虑的情况是互斥的这一事实。如果命中一个案例,则可能会发生一个赋值,该赋值会破坏以下案例的先决条件。考虑下面的实现,明确地使这些实例互相排斥。

public int find(int value) {
    Node curr = root;
    while (curr != null) {
        if (curr.value == value) {
            return value;
        }
        else if (curr.value < value) {
            curr = curr.lChild;
        }
        else if (curr.value > value) {
            curr = curr.rChild;
        }
        else if (curr.value == null) {
            break;
        }
    }
    return 0;
}
public int find(int值){
节点curr=根;
while(curr!=null){
如果(当前值==值){
返回值;
}
否则如果(当前值<值){
curr=curr.lChild;
}
否则如果(当前值>值){
curr=curr.rChild;
}
else if(curr.value==null){
打破
}
}
返回0;
}

如果curr.value节点类的代码(或最多a)和示例输入数据。将
if
s更改为
,否则如果
s,我不认为这很重要,因为条件是相互排斥的。如果
curr.value
的计算结果为true,
curr.value>value
curr.value==null
的计算结果必然为
false
,除非
curr.value
属于覆盖
的自定义类型,
否则如果(curr.value==null)
不能发生。值是一个
int
@PaulKertscher如果
curr.value
保持不变,
curr
被分配
curr.lchild
。如果赋值后
curr
null
,则随后的检查
curr.value==null
将取消引用
null
指针;一开始就应该省略后续检查。
public int find(int value) {
    Node curr = root;
    while (curr != null) {
        if (curr.value == value) {
            return value;
        }
        else if (curr.value < value) {
            curr = curr.lChild;
        }
        else if (curr.value > value) {
            curr = curr.rChild;
        }
        else if (curr.value == null) {
            break;
        }
    }
    return 0;
}