C# 二叉树搜索算法中的NullReferenceException
System.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;//没有值 } 我看不出这个二叉树搜索的配置有什么问题您使用的实现没有使用需要考虑的情况是互斥的这一事实。如果命中一个案例,则可
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;
}