(属于先序线索化代码错误,不是408考题会考察的内容,但姑且记录一下)
25王道数据结构Ch5.3讲解先序线索化代码时,只提及了在递归遍历T->lchild前要判断lchild不是前驱线索,否则会造成在两个结点之间的无限重复访问
实际上在递归遍历T->rchild前也需要要判断rchild不是后继线索,否则会造成一直重复访问一个结点。
造成重复访问的例子类似如下:
由于研究的是先序遍历,只有具有A以及A的左子树这种特点的所有树都会出现无限重复访问的错误,A的右子树实际上长什么形状都可以。
下面是根据错误代码的运行过程分析:
在不对rchild是否为线索进行判断时,C结点被visit()重复访问,导致pre和q均指向C结点,C->rchild = C,之后就会无限重复访问C结点
实际上机的情况也验证了代码的错误
因此,记得先序线索化时,无论是递归遍历lchild还是rchild,之前都需要判断是否是孩子