好的,因此使用线程遍历线程化二叉树就像这样。 从最左边的节点开始打印 跟随线程向右并打印它 按照右边的链接转到最左边的节点并打印出来 跟随线程向右打印...........(重复)
但是如何使用线程进行前后遍历?
答案 0 :(得分:2)
线程树节点通常有一个标志,告诉您节点中的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