设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等)
其实可以关联到练习10.4-5
先写第一种以栈作为辅助数据结构的方法(练习10.4-5中只能用固定量额外存储空间,舍弃了这种方法)
INORDER-TREE-WALK(x)
PUSH(S, NIL) // 先向辅助栈S中存入NIL作为循环终止符
while true
while x.left != NIL
PUSH(S, x) // 若x有左子结点(left),将x存入栈中
x = x.left // 同时以x的左子结点(x.left)代替x
print x.key // 此时x为树中最小元素,将其打印
while x.right == NIL
x = POP(S) // 若x没有右子结点,将栈S中弹出元素作为x
if x == NIL
break // 检测到循环终止符,跳出内层while循环
else
print x.key // 打印
if x == NIL
break // 检测到循环终止符,跳出外层while循环
else
x = x.right // 同时将右子结点赋予x
第二种就是10.4-5里那种以prev和now对上次和本次的元素进行比较,占用常数空间的方法
这里就不再写了,贴个链接