好的,所以通过使用线程遍历线程二叉树就像这样。从最左边的节点开始打印它跟随线程向右打印它跟随链接向右转到最左边的节点并打印它跟随线程向右打印它...........(重复)
但是如何使用线程进行前后遍历呢?
线程树节点通常有一个标志,告诉您节点中的right
和left
指针是对子节点的引用,还是对inorder / preorder后继节点的线程。这是您可以判断节点是否为叶子的唯一方法。
关于线程树的优点是顺序或反向顺序遍历可以快速完成而不需要递归。但是线程树不能帮助您进行后序或前序遍历。如果你想做其中一个,你必须使用递归算法,考虑线程。例如:
preorder(node)
print node
if (node.left is not a thread link)
preorder(node.left)
if (node.right is not a thread link)
preorder(node.right)
postorder(node)
if (node.left is not a thread link)
preorder(node.left)
if (node.right is not a thread link)
preorder(node.right)
print node