我认为我正在使用的算法无法理解。我有一个二叉树,其中" *"是根," C"在左边," +"在右边,+有" a"在左边和" b"在右边。
这是算法:
Module Find_Value ( List, Root, Value ) {
If ( Root is NULL ){
Return NULL;
}Else{
If ( List [ Root ] .data equals Value )
Return Root;
Temp = Find_Value ( List, List[ Root ].left, Value )
If ( Temp is NULL )
Return Find_Value ( List, List[ Root ].right, Value );
Else
Return Temp;
}
}
我应该执行Find_Value(List,0,b)
我可能只是读错了,但我没有看到任何指示回到树上。我得到find_value(List,1,C)第一次贯穿,然后我看到temp在C的左边看(这是null)和C的右边(也是null)。任何人都可以告诉我,我只是错误地解释说明吗?
答案 0 :(得分:0)
这就是这里发生的事情:
(我已将*替换为0,C替换为2以便更好地理解,并且还将它们用作每个步骤中每个温度的标识符)
1)Temp(*)= Find_Value(List,* .left,b);
2)Temp(C)= Find_value(List,C.left,b); //返回null, 因此Temp(C)= NULL;
3)如果(Temp(C)为NULL) 返回Find_Value(List,C.right,Value); //返回null;
4)因此第一步返回null; Temp(*)= null;
5)如果(Temp(*)为NULL) 返回Find_Value(List,* .right,Value);
6)Temp(+)= Find_Value(List,+ .left,Value);
7)Temp(a)= Find_Value(List,a.left,Value); //返回null
8)如果(Temp(a)为NULL) 返回Find_Value(List,a.right,Value); //返回null 因此Temp(+)= NULL;
9)如果(Temp(+)为NULL) 返回Find_Value(List,+。right,Value);
10)如果(List [Root] .data等于Value) 返回根; 其中List [Root] .data = b;
步骤9返回b,然后步骤5返回b; 并且整体函数返回b;