二叉树搜索算法

时间:2014-10-21 05:25:36

标签: algorithm search tree

我认为我正在使用的算法无法理解。我有一个二叉树,其中" *"是根," 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)。任何人都可以告诉我,我只是错误地解释说明吗?

1 个答案:

答案 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;