【发布时间】:2018-03-30 04:02:46
【问题描述】:
好的,所以使用线程按顺序遍历线程二叉树是这样的:
- 从最左边的节点开始打印
- 跟随线程向右并打印
- 点击右边的链接到最左边的节点并打印出来
- 跟随线程向右并打印
- (重复)
但是如何使用线程进行前序和后序遍历?
【问题讨论】:
标签: data-structures tree traversal
好的,所以使用线程按顺序遍历线程二叉树是这样的:
但是如何使用线程进行前序和后序遍历?
【问题讨论】:
标签: data-structures tree traversal
线程树节点通常有一个标志,告诉您节点中的right 和left 指针是对子节点的引用,还是对中序/前序继任者的线程。这是您判断节点是否为叶子的唯一方法。
线程树的好处是可以快速完成中序或反向中序遍历,而无需递归。但是线程树不能帮助您进行后序或前序遍历。如果你想做其中之一,你必须使用递归算法,考虑到线程。例如:
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
【讨论】: